System.Threading.Timer
オンとオフを切り替えるものがあります。タイマーをオフにする 2 つの方法を知っています。
- 電話
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 (つまりChange(-1, -1)
) に設定することは、「CPU ヒーター」ではありません。タイマーは CPU リソースを使用しません。もちろん、コールバック メソッドは実行しますが、実行中の (通常は短い) 時間だけです。
いずれにせよ、新しいタイマーを作成するのに費用がかかるわけではなく、それを無効にしChange(-1, -1)
てもパフォーマンスに悪影響を与えることはありません。モデルに最適な手法を使用してください。