Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决TCP服务器100%CPU使用问题?_C#_.net_Cpu Usage_Tcpserver - Fatal编程技术网

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

C# 如何解决TCP服务器100%CPU使用问题?,c#,.net,cpu-usage,tcpserver,C#,.net,Cpu Usage,Tcpserver,我在C#(作为Windows服务)中创建了一个TCP服务器,它主要基于MSDN中的示例异步服务器套接字代码。然而,在运行了大约几天后,它开始使用dev机器上100%的CPU,并一直保持到我停止并重新启动服务为止。奇怪的是,即使服务达到最大CPU使用率,它仍然可以正常工作,所以功能从来都不是问题 我在StackOverflow上问过这个问题,但我想我粘贴的代码没有明显的问题。我已经监控了程序使用的线程数量,它总是在14-17之间,所以我认为这不是问题 现在我有点卡住了,不知道如何解决这个问题。我是

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

我在StackOverflow上问过这个问题,但我想我粘贴的代码没有明显的问题。我已经监控了程序使用的线程数量,它总是在14-17之间,所以我认为这不是问题

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

任何帮助都将不胜感激。谢谢

如果将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(). 
 }

我一定会试试的。因此,在主线程从另一个线程接收到Set事件后,立即使其休眠,以便在重置标志之前有一个延迟?其他选项通过在探查器中运行来认真调试代码。ANTS profiler有一个免费的trails,一些VS.net版本有一个内置的profiler。另一个选项是,在调试时只需按下暂停按钮,即可找到当前执行指针指向的位置。其中一个工具是Process Monitor。如果您能够正确地配置符号,它可以提供许多有关程序堆栈上发生的事情的有趣信息。如果您以前从未使用过Process Monitor,将有一系列视频介绍如何使用它: