禁用System.Threading.Timer的最佳方法

时间:2013-08-13 20:07:40

标签: .net timer

我有一个System.Threading.Timer可以打开和关闭。我知道有两种关闭计时器的方法:

  1. 致电Timer.Change(-1,-1)
  2. 处理计时器,并在需要时创建一个新计时器
  3. 在资源和性能方面哪一个更好?将Change(-1,-1)称为CPU加热器?创建计时器是否很昂贵?

2 个答案:

答案 0 :(得分:9)

将定时器的到期时间和周期设置为无限,暂时停止操作。

MyTimer.Change(Timeout.Infinite, Timeout.Infinite);

要恢复将其恢复为正常操作间隔:

MyTimer.Change(this.RestartTimeout, this.OperationInterval);

没有必要每次都处理和重新创建它,并且将间隔设置为无限将不会浪费和额外的cpu周期。

在这个例子中,值this.RestartTimeout表示在恢复后运行定时器的第一个“tick”的时间,我正常使用0。

在我的具体使用中,我通常会切换计时器的到期时间和周期,然后将计时器作为其回调的第一行停止,执行计时器工作,然后在结束时恢复计时器。这是为了防止重新运行长时间运行的代码。

(Timeout.Infite is -1)

答案 1 :(得分:4)

将计时器的初始值和间隔设置为-1(即Change(-1, -1))不是“CPU加热器”。计时器不使用CPU资源。当然,回调方法只会在执行时(通常是短暂的)时间内进行。

在任何情况下,创建新计时器并不昂贵,用Change(-1, -1)禁用它也不会产生任何负面的性能影响。使用最适合您模型的技术。