我有IP地址的数据表中的大名单,我有这么快ping通他们, 我用这个代码:ping IP地址的大名单的最快方法是什么?
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;
}
然后我把它在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);
}
}
因为我想在我的项目的背景我调用类的线程来完成这项工作:
threadping = new Thread(CheckNetworkState);
threadping.IsBackground = true;
threadping.Start();
我的问题是,它需要这么多的时间,并没有在后台工作。我的意思是系统正忙,直到tbl_clientinfo中的所有IP地址都通过ping类。 我想让系统检查所有行,因为我正在处理我的项目的其他部分。
我做得对吗?
平是不会要快。最糟糕的情况是,每个ping数据包都会被忽略/丢失/丢失,您必须等待每次ping测试的超时时间。为了使这个“快速”,你需要同时发射多个ping。 –
ping的速度不是来自代码的百分之百,它直到通信和网络 –
您可以使用ServerToPing []并创建多个并行工作的线程。然后,你可以使用并行库或类似的信号量来运行和规则线程... – Marco