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