遅延実行のための Thread.Sleep と Timer の使用の比較
コードの実行を遅延させたい場合、オプションには Thread.Sleep と Timer が含まれます。どちらもこの目的を果たしますが、アプローチと効率が異なります。
Thread.Sleep: リソースを大量に消費しますが、遅延の影響を受けやすい
Thread.Sleep を使用すると、新しい実行を一時停止するスレッド。ただし、新しいスレッドごとに作成と破棄にかなりのリソース オーバーヘッドが発生するため、複数の遅延が発生した場合、このアプローチは非効率的になります。さらに、Thread.Sleep では、OS がスレッドを指定よりも長くスリープ状態にする可能性があるため、予期しない遅延が発生する可能性があります。
タイマー: 効率的でより正確
対照的に、タイマーは、新しいスレッドを作成するのではなく、既存のスレッドを再利用して、スレッド プールのスレッドにコールバックをディスパッチします。これによりリソースが節約され、効率が向上します。また、Timer は、指定された時間に近づいてコールバックを実行することを目的としており、Thread.Sleep よりも高い精度を提供します。
Timer の破棄
実行が遅延するため、 Timer インスタンスを破棄する方法の問題です。考えられる解決策の 1 つは、タイマーをコールバックのパラメータとして渡し、そのコールバック内で Dispose を呼び出すことです。ただし、これにより、実行中に Timer がロックされるという問題が発生する可能性があります。
別の方法として、Timer インスタンスをカプセル化する別の "TimerState" クラスを作成することもできます。タイマーを作成するときは、このオブジェクトをロックして、早期に破棄されないようにします。
結論
これらの考慮事項に基づくと、一般に、タイマーは改善されているため、遅延実行には推奨される選択肢です。効率と正確さ。ただし、action() が UI 上で動作する場合は、UI スレッド上でコールバックを実行する System.Windows.Forms.Timer を使用する方が適している可能性があります。
以上がThread.Sleep と遅延実行のタイマー: どちらがより効率的で正確ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。