c# - Timer.Change 有多贵?
问题描述
考虑一个具有性能敏感、高度并行的 C# 处理管道的服务器,如果某些事情停止发生(例如媒体流),我们希望在其中引发一个事件。
一种理论上的方法是创建一个由管道连续延迟的计时器。举个简单的例子:
const int IDLE_MILLIS = 1000; // 1 second
Timer timer = new Timer(IDLE_MILLIS, () =>
{
Console.WriteLine("Pipeline is idle.");
});
void ProcessMediaFrame(MediaFrame frame)
{
timer.Change(IDLE_MILLIS, Timeout.Infinite);
// pipeline is not idle
}
这里的方法有多贵Change
?(https://docs.microsoft.com/en-us/dotnet/api/system.threading.timer.change)
空闲时是否Timer
消耗任何资源?
解决方案
源代码中的性能说明(感谢 Codexer 链接正确的文件)说您的案例正是他们优化的内容。
我们假设定时器被频繁地创建和销毁,但很少真正触发。
...
- 操作超时...几乎从不触发,因为重点是计时器仅在出现问题时触发。
推荐阅读
- javascript - 如何在 owl carousel 的屏幕上显示上一个和下一个滑块的一半?
- python - Unicode:当作为 CGI 运行时,Python 3 在 Ubuntu 上忽略 LC_CTYPE
- jquery - 如果必填文本框为空,则发出警报
- python-2.7 - 在 CENTOS 7 中启动启动 REDHAWK Domain Mgr、Device Mgr 和 Waveform
- cqrs - 是否可以在 prooph cqrs 中只为事件源创建一个动态表?
- sharepoint - 从 SharePoint 中删除文本
- javascript - Angular 生产无法在网站上运行
- html - 如何在网站上使用基于表单的登录来实现不同的领域?
- angular - Angular 多显示器应用程序
- if-statement - Streamlabs Chatbot 对 if else "request" 执行响应