如何解决TCP服务器的100%CPU使用率问题?

时间:2013-06-10 12:12:42

标签: c# .net cpu-usage tcpserver

我在C#(作为Windows服务)中创建了一个TCP服务器,该服务器主要基于MSDN中的示例异步服务器套接字代码。然而,在运行大约几天后,它开始在开发机器上使用100%的CPU并保持在那里直到我停止并重新启动服务。奇怪的是它仍然可以正常工作,即使服务达到最大CPU使用率,因此功能永远不会成为问题。

我在StackOverflow上询问了这个问题 - http://goo.gl/XB2C5但我猜我粘贴的代码没有明显的问题。我已经监视了程序使用的线程数,它总是在14-17之间,所以我不认为这是一个问题。

现在我有点卡住了,不知道如何解决这个问题。我可以使用任何工具或更多诊断代码,我可以添加以找出导致CPU使用率飙升的原因吗?我只是需要一些指导如何进一步调查这个问题。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分: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(). 
 }