.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)而不是神奇的值。这是否回答了您的问题?