我在C#(作为Windows服务)中创建了一个TCP服务器,该服务器主要基于MSDN中的示例异步服务器套接字代码。然而,在运行大约几天后,它开始在开发机器上使用100%的CPU并保持在那里直到我停止并重新启动服务。奇怪的是它仍然可以正常工作,即使服务达到最大CPU使用率,因此功能永远不会成为问题。
我在StackOverflow上询问了这个问题 - http://goo.gl/XB2C5但我猜我粘贴的代码没有明显的问题。我已经监视了程序使用的线程数,它总是在14-17之间,所以我不认为这是一个问题。
现在我有点卡住了,不知道如何解决这个问题。我可以使用任何工具或更多诊断代码,我可以添加以找出导致CPU使用率飙升的原因吗?我只是需要一些指导如何进一步调查这个问题。
非常感谢任何帮助。谢谢!
答案 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().
}