1

我在 C# 中创建了一个 TCP 服务器(作为 Windows 服务),它主要基于 MSDN 中的示例异步服务器套接字代码。然而,在运行大约几天后,它开始使用开发机器上 100% 的 CPU 并一直停留在那里,直到我停止并重新启动服务。奇怪的是它仍然可以正常工作,即使服务达到最大 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 回答