1

C# 4.0 Windows アプリケーションで長時間実行されるタスク (非同期) の場合。

選択肢は次のとおりです。

  1. BackgroundWorker (スレッドプール)

  2. スレッド

上記の 2 つは、実行時間の長いタスク (アプリケーションの有効期間全体) に推奨されます。他に選択肢はありますか?さらに、

  • BackgroundWorker - ThreadPool スレッドを使用し、UI の更新を伴う長時間実行プロセスに使用します。

  • スレッド- ユーザー定義のスレッド (スレッド作成のオーバーヘッドなど) および実行時間の長いプロセス (優先順位を使用できます)

    どちらが最良の選択でしょう

    1. UIの更新、優先度、およびスレッド(アプリケーション/プロセスの開始時にのみ作成される)が必要ない場合は?

    2. タスク数が増えたら?(ThreadPool 枯渇のケア)

他に面白いことはありますか?

4

2 に答える 2

1

BackgroundWorker もスレッドを使用しますが、一部のスレッドの作成と監視の詳細を抽象化するだけです。

したがって、BackgroundWorker を使用することで回避できます。- 詳細に対処する必要がある - 新しいスレッドの作成コストが高い (+パフォーマンス)

ThreadPool の枯渇は、他の非同期タスクを終了する前に別の非同期タスクを実行する必要がある場合にのみ発生します。ここでできることはそれほど多くありません。CPU はすでにフル キャパシティで実行されているからです。

スレッドを直接使用するつもりはありません。提供されている ThreadPool に満足できない場合は、自分で実装してみてください (やらないほうがいいです。冗談です)。

于 2012-11-07T07:45:54.430 に答える
1

C# 4.0 Windows アプリケーションで長時間実行されるタスク (非同期) の場合。

おそらく、LongRunning オプションを指定して Task (TPL) を使用するでしょう。TPL も ThreadPool の上で実行されますが、オプションによりスレッドを予約することができます。

タスク数が増えたら?(ThreadPool 枯渇のケア)

ThreadPool は動的に適応しようとしますが、それを少し支援するオプションがあります。

于 2012-11-07T07:39:10.057 に答える