我有一个System.Threading.Timer
可以打开和关闭的。我知道关闭计时器的两种方法:
- 称呼
Timer.Change(-1,-1)
- 处置计时器,并在需要时创建一个新计时器
就资源和性能而言,哪一个更好?是调用Change(-1,-1)
CPU加热器吗?创建计时器是否昂贵?
将计时器的到期时间和周期设置为无限以暂时停止操作。
MyTimer.Change(Timeout.Infinite, Timeout.Infinite);
要恢复将其更改回正常操作间隔:
MyTimer.Change(this.RestartTimeout, this.OperationInterval);
不需要每次都dispose和recreate它,将interval设置为infinite不会浪费和额外的cpu周期。
在此示例中,该值this.RestartTimeout
表示在恢复后计时器的第一个“滴答”运行多长时间,我通常使用 0。
在我的具体使用中,我通常会切换定时器的到期时间和周期,然后停止定时器作为它的回调的第一行,做定时器工作,然后在最后恢复它。这是为了防止重新进入长时间运行的代码。
将计时器的初始值和间隔设置为 -1(即Change(-1, -1)
)不是“CPU 加热器”。计时器不使用 CPU 资源。回调方法当然可以,但仅在(通常是短暂的)执行期间。
在任何情况下,创建一个新计时器一点都不昂贵,禁用它也不Change(-1, -1)
会对性能产生任何负面影响。使用最适合您的模型的技术。