我有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