c# - 当计算机资源利用率较高时.NET 计时器不会回调

标签 c# timer

我使用System.Timers.Timer每隔几秒进行回调。 回调基本上将连续的心跳消息发送到连接的服务器。

如果心跳消息在n秒内没有发送,则服务器断开与连接的客户端的连接。

我观察到,当用户计算机的资源利用率非常高时,例如 - 100% CPU 利用率和几乎 95% 的内存利用率,并且系统未响应用户交互,则不会调用计时器回调。

我也尝试过使用System.Threading.Timer,但没有运气,得到相同的结果。

.NET 中确保您的操作调用而不管计算机资源利用率如何的最佳方法是什么。

注意,

  • 此实现在正常情况下运行得非常完美。
  • 我没有使用 Windows 应用程序中的 UI 线程来调用回调,而是使用后台(非 UI)线程。

最佳答案

看来您的定期心跳对于您的应用程序来说非常重要,甚至可能比 UI 响应能力和其他问题更重要。
在这种情况下,实时系统通常会为高优先级创建专用线程。
因此,尝试创建一个专用线程(不是BackgroundWorker,而是新的System.Threading.Thread),给它高优先级(ThreadPriority.Highest)并从此优先级线程发送心跳。

关于c# - 当计算机资源利用率较高时.NET 计时器不会回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35692766/

相关文章:

c# - System.Threading.Timer 不触发我的 TimerCallBack 委托(delegate)

Android:在用户界面中显示的计时器

c++ - 为什么 "clock( )"的 CPU 使用率过高?

c# - 从较大的字符串中提取 Xml 元素

c# - 如何在温莎城堡中自动注册(按照惯例)通用装饰器

c# - 在 C# 中,如何使 datagridview 的左侧边框消失?

java - 在重复计时器上调用 View.invalidate 的可接受方法

C#/Mono Console.In.ReadToEnd() 停止进程

C# - 修改文件权限 ASP.NET MVC

Java 定时器 ScheduleAtFixedRate。如何使调用 .cancel 仅在当前迭代完成后停止计时器