C# CPU使用率和心跳

C# CPU使用率和心跳,c#,asynchronous,timer,cpu-usage,C#,Asynchronous,Timer,Cpu Usage,我已经构建了一个网络层,它使用SAEA套接字命令来处理IOC容器的多个连接。此网络层使用一种心跳形式,通知服务器客户端感兴趣的主题 我的问题是,有时运行在网络层之上的某个进程占用了CPU。这会阻止及时调用heartbeat,服务器将看到来自客户端的订阅。我正在使用System.Threading.Timer运行心跳发送 事实证明,令人不快的过程是数学计算,而不是IO限制(我的同事预加载了数据库中的数据,这奇迹般地不会阻塞网络。)他使用的是并行的。For loop来进行计算,当它到达循环时,你可以

我已经构建了一个网络层,它使用SAEA套接字命令来处理IOC容器的多个连接。此网络层使用一种心跳形式,通知服务器客户端感兴趣的主题

我的问题是,有时运行在网络层之上的某个进程占用了CPU。这会阻止及时调用heartbeat,服务器将看到来自客户端的订阅。我正在使用System.Threading.Timer运行心跳发送

事实证明,令人不快的过程是数学计算,而不是IO限制(我的同事预加载了数据库中的数据,这奇迹般地不会阻塞网络。)他使用的是并行的。For loop来进行计算,当它到达循环时,你可以看到CPU使用率跳跃

我试过几种方法,但都没有成功:

  • 只需减少循环上的MaxDegreeOfParallelism
  • 添加优先级较低的计划程序,如下所示:

  • 确保心跳停止的其他策略有哪些?与消耗CPU的数学函数相比,这真的不需要做太多工作。

    这正是优先级要解决的问题——首先尝试一下。这更可能是线程池问题,您可以修改threadpool.SetMinThreads()。再说一次,如果它是如此关键,那么gen#2垃圾收集和页面文件破坏也应该让你担心。计算不是一件持续的事情。它每天只需要运行一次。科里-这就是我尝试过的。我认为,只要在较低优先级上运行计算,心跳就可以在需要时获取其CPU片。