C# 如何解决TCP服务器100%CPU使用问题?
我在C#(作为Windows服务)中创建了一个TCP服务器,它主要基于MSDN中的示例异步服务器套接字代码。然而,在运行了大约几天后,它开始使用dev机器上100%的CPU,并一直保持到我停止并重新启动服务为止。奇怪的是,即使服务达到最大CPU使用率,它仍然可以正常工作,所以功能从来都不是问题 我在StackOverflow上问过这个问题,但我想我粘贴的代码没有明显的问题。我已经监控了程序使用的线程数量,它总是在14-17之间,所以我认为这不是问题 现在我有点卡住了,不知道如何解决这个问题。我是否可以使用任何工具或添加更多诊断代码来找出导致CPU使用率激增的原因?我只是需要一些关于如何进一步调查这个问题的指导 任何帮助都将不胜感激。谢谢 如果将Thread.Sleep()添加到以下循环的末尾,是否会停止100%的cpuC# 如何解决TCP服务器100%CPU使用问题?,c#,.net,cpu-usage,tcpserver,C#,.net,Cpu Usage,Tcpserver,我在C#(作为Windows服务)中创建了一个TCP服务器,它主要基于MSDN中的示例异步服务器套接字代码。然而,在运行了大约几天后,它开始使用dev机器上100%的CPU,并一直保持到我停止并重新启动服务为止。奇怪的是,即使服务达到最大CPU使用率,它仍然可以正常工作,所以功能从来都不是问题 我在StackOverflow上问过这个问题,但我想我粘贴的代码没有明显的问题。我已经监控了程序使用的线程数量,它总是在14-17之间,所以我认为这不是问题 现在我有点卡住了,不知道如何解决这个问题。我是
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().
}
我一定会试试的。因此,在主线程从另一个线程接收到Set事件后,立即使其休眠,以便在重置标志之前有一个延迟?其他选项通过在探查器中运行来认真调试代码。ANTS profiler有一个免费的trails,一些VS.net版本有一个内置的profiler。另一个选项是,在调试时只需按下暂停按钮,即可找到当前执行指针指向的位置。其中一个工具是Process Monitor。如果您能够正确地配置符号,它可以提供许多有关程序堆栈上发生的事情的有趣信息。如果您以前从未使用过Process Monitor,将有一系列视频介绍如何使用它: