ping 大量 IP 地址的最快方法是什么?

mar*_*adi 5 c# multithreading thread-safety visual-studio-2010 visual-studio

我在数据表中有一个很大的 IP 地址列表,我必须如此快速地对它们执行 ping 操作,我使用了以下代码:

public bool PingIP(string IP)
{
    bool result = false;
    try
    {                
        Ping ping = new Ping();
        PingReply pingReply = ping.Send(IP);
        if (pingReply.Status == IPStatus.Success)
            result = true;
    }
    catch
    {
        result = false;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后我在 while 循环中调用它:

private void CheckNetworkState()
{
    while (rowindexping > -1)
    {
        if (rowindexping == tbl_ClientInfo.Rows.Count)
        {
            rowindexping = -1;
            return;
        }

        string ip = tbl_ClientInfo.Rows[rowindexping]["clientip"].ToString();
        if (!PingIP(ip))
        {
           do something
        }
        rowindexping++;
        Thread.Sleep(100);
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我想在项目的后台完成这项工作,所以我在线程中调用该类:

threadping = new Thread(CheckNetworkState);            
threadping.IsBackground = true;
threadping.Start(); 
Run Code Online (Sandbox Code Playgroud)

我的问题是它需要很多时间并且在后台不起作用。我的意思是系统正忙,直到 tbl_clientinfo 中的所有 IP 地址都通过 ping 类。我希望该系统检查所有行,因为我正在处理项目的其他部分。

我做对了吗?

Bra*_*rad 0

我要做的是在后台运行一个单独的多线程守护进程,执行 ping 操作,并将结果放入数据库中。有一个稍后通过 AJAX 加载结果的页面。