Thread.Sleep() の短所とより良い代替案
Thread.Sleep()
は、コードにレイテンシーを導入する無害な方法のように思えるかもしれませんが、特に最新のプログラミング環境では、これを使用すると重大な欠点があります。
Thread.Sleep()
に関する潜在的な問題:
Thread.Sleep()
正確なタイミングは保証できません。現在のスレッドを指定されたミリ秒間ブロックするため、待ち時間が予想より長くなる可能性があります。 Thread.Sleep()
不必要に無駄にします。各スレッドはメモリを消費し、コンテキスト切り替えのオーバーヘッドが発生するため、スレッドを過剰に使用するとパフォーマンスが低下する可能性があります。 Thread.Sleep()
はスレッドをブロックし、他のコードの実行を防ぎます。したがって、継続的にイベントを監視したりイベントに応答したりする必要があるコードがある場合、Thread.Sleep()
はその実行を妨げます。 代替:
Thread.Sleep()
の制限を克服するには、次の代替案を検討してください:
代替例:
最初の例では、Thread.Sleep()
をロック オブジェクトの待機に置き換えることができます。これにより、ロックが解放されるまでスレッドがブロックされます。
<code class="language-csharp">using System.Threading; ... while (true) { doSomework(); i++; lock (syncLock) { Monitor.Wait(syncLock); } }</code>
:Thread.Sleep()
を使用する代わりに、新しいイメージのディレクトリを継続的にポーリングできます。
<code class="language-csharp">using System.IO; ... while (true) { string[] images = Directory.GetFiles(@"C:\Dir", "*.png"); if (images.Length > 0) { foreach (string image in images) { this.Invoke(() => this.Enabled = true); pictureBox1.Image = new Bitmap(image); } } }</code>
以上がThread.Sleep(): なぜ問題があるのか、より良い代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。