7

System.Threading.Timerオンとオフを切り替えるものがあります。タイマーをオフにする 2 つの方法を知っています。

  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);

毎回破棄して再作成する必要はありません。また、間隔を無限に設定すると、余分な CPU サイクルが浪費されることはありません。

この例では、値this.RestartTimeoutは、再開後にタイマーの最初の「ティック」が実行されるまでの時間を示します。通常は 0 を使用します。

私の特定の使用法では、通常、タイマーの期限と期間を切り替えてから、コールバックの最初の行としてタイマーを停止し、タイマーの作業を行い、最後に再開します。これは、実行時間の長いコードの再入を防ぐためです。

(Timeout.Infite は -1)

于 2013-08-13T20:16:54.903 に答える
4

タイマーの初期値と間隔を -1 (つまりChange(-1, -1)) に設定することは、「CPU ヒーター」ではありません。タイマーは CPU リソースを使用しません。もちろん、コールバック メソッドは実行しますが、実行中の (通常は短い) 時間だけです。

いずれにせよ、新しいタイマーを作成するのに費用がかかるわけではなく、それを無効にしChange(-1, -1)てもパフォーマンスに悪影響を与えることはありません。モデルに最適な手法を使用してください。

于 2013-08-13T20:24:11.513 に答える