多くのパフォーマンスを必要とするタスクに何を使用すればよいか知りたいです。
Backgroundworker
、Thread
またはThreadPool
?
これまでスレッドを使用してきましたが、アプリケーションの速度を改善する必要があります。
多くのパフォーマンスを必要とするタスクに何を使用すればよいか知りたいです。
Backgroundworker
、Thread
またはThreadPool
?
これまでスレッドを使用してきましたが、アプリケーションの速度を改善する必要があります。
BackgroundWorker は、スレッド プール スレッドと同じものです。UI スレッドでイベントを実行する機能が追加されます。進行状況を表示し、結果で UI を更新するのに非常に便利です。したがって、その典型的な使用法は、作業を行う必要があるときに UI がフリーズするのを防ぐことです。最初の目標はパフォーマンスではなく、コードを非同期に実行することです。このパターンは、Task<> クラスと async/await キーワードによって、後の .NET バージョンでも適切に拡張されています。
スレッド プール スレッドは、リソースの消費を避けるのに役立ちます。スレッドは高価なオペレーティング システム オブジェクトであり、作成できるスレッドの数は非常に限られています。スレッドは、5 つのオペレーティング システム ハンドルと 1 メガバイトの仮想メモリ アドレス空間を使用します。これらのハンドルを早期に解放する Dispose() メソッドはありません。スレッド プールは、主にスレッドを再利用し、アクティブなスレッドが多すぎないようにするために存在します。スレッド プール スレッドは、実行する作業が制限されている場合にのみ使用することが重要です。理想的には、0.5 秒以上かかることはありません。そして頻繁にブロックしません。したがって、パフォーマンスが重要な場合ではなく、短時間の作業に最適です。I/O 完了の処理は、TP スレッドにとって理想的なタスクです。
はい、スレッドを使用してプログラムのパフォーマンスを向上させることもできます。これを行うには、TaskContinuationOptions.LongRunning を使用する Thread または Task<> を使用します。実際にパフォーマンスを向上させるにはいくつかの厳しい要件があり、それらは非常に厳しいものです。