我使用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/