Dot-Net

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

  • August 13, 2013

我有一個System.Threading.Timer可以打開和關閉的。我知道關閉計時器的兩種方法:

  1. 稱呼Timer.Change(-1,-1)
  2. 處置計時器,並在需要時創建一個新計時器

就資源和性能而言,哪一個更好?是呼叫Change(-1,-1)CPU加熱器嗎?創建計時器是否昂貴?

將計時器的初始值和間隔設置為 -1(即Change(-1, -1))不是“CPU 加熱器”。計時器不使用 CPU 資源。回調方法當然可以,但僅在(通常是短暫的)執行期間。

在任何情況下,創建一個新計時器一點都不昂貴,禁用它也不Change(-1, -1)會對性能產生任何負面影響。使用最適合您的模型的技術。

將計時器的到期時間和周期設置為無限以暫時停止操作。

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

要恢復將其更改回正常操作間隔:

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

不需要每次都dispose和recreate它,將interval設置為infinite不會浪費和額外的cpu週期。

在此範例中,該值this.RestartTimeout表示在恢復後計時器的第一個“滴答”執行多長時間,我通常使用 0。

在我的具體使用中,我通常會切換定時器的到期時間和周期,然後停止定時器作為它的回調的第一行,做定時器工作,然後在最後恢復它。這是為了防止重新進入長時間執行的程式碼。

(超時。無限是-1)

引用自:https://stackoverflow.com/questions/18218279