1

私は C# で (Windows サービスとして) TCP サーバーを作成しましたが、これは主に MSDN のサンプル Asynchronous Server Socket コードに基づいています。ただし、約 2 日運用した後、開発マシンの CPU を 100% 使用し始め、サービスを停止して再起動するまでその状態が続きます。奇妙なことに、サービスが最大の CPU 使用率に達した場合でも、正常に動作するため、機能が問題になることはありません。

ここで StackOverflow について質問しました - http://goo.gl/XB2C5ですが、貼り付けたコードに明らかな問題はなかったと思います。プログラムが使用するスレッドの数を監視しましたが、常に 14 ~ 17 であるため、問題ではないと思います。

今、私は少し立ち往生しており、この問題のトラブルシューティング方法がわかりません。使用できるツールや、CPU 使用率が急上昇する原因を突き止めるために追加できる診断コードはありますか? 問題をさらに調査する方法についてのガイダンスが必要です。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

次のループの最後に Thread.Sleep() を追加すると、100% の CPU が停止しますか?

 while (true)
 {
    // Set the event to nonsignaled state.
    allDone.Reset();                    

    // Start an asynchronous socket to listen for connections.
    listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);

    // Wait until a connection is made before continuing.
    allDone.WaitOne();

    Thread.Sleep() //This makes the thread wait for its next timeslice
    //Thread.Yield()  //This makes the thread wait on another change to run from the OS wich might be much faster then Thread.Sleep(). 
 }
于 2013-06-10T12:14:22.047 に答える