7

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

  1. 称呼Timer.Change(-1,-1)
  2. 处置计时器,并在需要时创建一个新计时器

就资源和性能而言,哪一个更好?是调用Change(-1,-1)CPU加热器吗?创建计时器是否昂贵?

4

2 回答 2

12

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

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

要恢复将其更改回正常操作间隔:

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

不需要每次都dispose和recreate它,将interval设置为infinite不会浪费和额外的cpu周期。

在此示例中,该值this.RestartTimeout表示在恢复后计时器的第一个“滴答”运行多长时间,我通常使用 0。

在我的具体使用中,我通常会切换定时器的到期时间和周期,然后停止定时器作为它的回调的第一行,做定时器工作,然后在最后恢复它。这是为了防止重新进入长时间运行的代码。

(超时。无限是-1)

于 2013-08-13T20:16:54.903 回答
4

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

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

于 2013-08-13T20:24:11.513 回答