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

.net 禁用System.Threading.Timer的最佳方法,.net,timer,.net,Timer,我有一个System.Threading.Timer,可以开关。我知道两种关闭计时器的方法: 调用Timer.Change(-1,-1) 处理计时器,并在需要时创建一个新的计时器 在资源和性能方面,哪一个更好?调用Change(-1,-1)CPU加热器吗?创建计时器是否昂贵?将计时器的到期时间和周期设置为无限,以临时停止操作 MyTimer.Change(Timeout.Infinite, Timeout.Infinite); 要恢复,请将其更改回正常操作间隔: MyTimer.Change(

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

  • 调用
    Timer.Change(-1,-1)
  • 处理计时器,并在需要时创建一个新的计时器

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

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

    MyTimer.Change(Timeout.Infinite, Timeout.Infinite);
    
    要恢复,请将其更改回正常操作间隔:

    MyTimer.Change(this.RestartTimeout, this.OperationInterval);
    
    无需每次都对其进行处理和重新创建,并且将间隔设置为无限将不会浪费和额外的cpu周期

    在本例中,值
    this.RestartTimeout
    表示在恢复后计时器的第一个“滴答声”运行之前的时间,我通常使用0

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


    将计时器的初始值和间隔设置为-1(即
    更改(-1,-1)
    )不是“CPU加热器”。计时器不使用CPU资源。当然,回调方法会这样做,但只在它执行时(通常很短)


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

    我更喜欢这个答案,因为它使用常量(Timeout.Infinite)而不是神奇的值。这是否回答了您的问题?