4

つまり、600を超えるデバイスがあるサイトがあります。標準の.NETpingクラスを使用して、それらすべてに1つずつpingを実行しようとしています。何らかの理由で、このスレッドはクラッシュしています-数日後に応答を停止します。ネットワーク上のデバイスにpingを実行するだけです。Microsoft Windows Server2008R2を使用しています。.NET pingクラスに問題はありますか?また、pingが原因であると推測されるメモリリークが発生しているようです。私は私のために仕事をするためにwin32pingdllを書くべきですか、それとも.NETで何か間違ったことをしていますか?

private void PingDevice(out bool state, string IP)
{
    PingReply pingReply;
    System.Net.NetworkInformation.Ping pingSender = null;
    state = false;
    try
    {
        pingSender = new System.Net.NetworkInformation.Ping();
        pingReply = pingSender.Send(IP, 4000);
        state = (pingReply.Status == IPStatus.Success); // comms is on/off
    }
    catch (Exception ex)
    {
        PingGlobals.driverThread.LogIt("$E Pinging Devices:" + ex.Message + ", " + IP);
    }
    finally
    {
        if (pingSender != null)
        {
            ((IDisposable)pingSender).Dispose();
        }
    }
}
4

3 に答える 3

2

非同期バージョンの Ping を使用しているときに、Ping が返されない場合があることがわかりました。これが Async や Sync で発生した場合は、単に停止するだけだと想像できます。Async について私が見つけた答えは、(Ping タイムアウトよりも長い) タイムアウトを設定し、SendAsync の前に SendAsyncCancel を呼び出して再試行することです。

于 2013-03-22T17:35:58.020 に答える
1

これは、3.5 より前の .Net バージョンで報告された問題です。
この問題とその解決方法について説明している Microsoft の記事がここにあります。

于 2013-04-29T07:25:48.733 に答える
1

System.Net.NetworkInformation.Ping クラスの新しいインスタンスを作成すると、Server 2008 でメモリ リークが発生するようです。1 つ (または 100) のインスタンスを保持して再利用すると、問題は解決します。複数のスレッドからのアクセスには十分注意してください。

于 2013-04-05T13:11:04.457 に答える