2

かなり速い頻度(100msごと)でイベントを発生させるクラスがあります。このプロセスの速度低下を回避するために、イベントハンドラーは、(イベントハンドラー内で実行するのではなく)ある種のバックグラウンドタスク/スレッド/ワーカーに処理を渡す必要があります。

最善のアプローチは何ですか?Task.Factory.StartNewイベントハンドラー内で使用する必要がありますか?これほど迅速にタスクを作成するオーバーヘッドがありますか(たとえば、5つのイベントハンドラーが100ミリ秒ごとに5つのタスクを作成します)?または、BackgroundWorker(サブスクライバーのコンストラクターでインスタンス化された)を使用して、イベントハンドラーで.RunAsyncメソッドを呼び出すことはできますか?

4

1 に答える 1

4

ふたつのやり方:

  • どちらかを使用しますTask.Factory.StartNew。このメソッドは、タスク作成コストを最小限に抑えるためにThreadPoolに依存しています。ほとんどの場合、これで問題ありません。
  • パフォーマンスへの影響をさらに減らす必要がある場合は、プロデューサー/コンシューマーキューを作成できます。イベントがトリガーされたら、通知をキューに入れます。一方、スレッドはキューを監視し、通知が到着すると処理します。
于 2012-08-28T09:20:11.157 に答える