3

まず、すべての返信に感謝します!

もっと具体的に言いたいのですが、現在および過去のレポートを表示する Web サイトがあります。Web サイトをナビゲートしながら、ユーザーがすべてまたは一部の履歴を削除できるようにしたいと考えています。

したがって、データの削除を処理する別のスレッドを実行したいのですが、このスレッドの優先度を低くして、Web サイトが遅くなったり応答しなくなったりしないようにします。

私は現在設計段階にあり、いくつかの戦略の提案をいただければ幸いです。ありがとう!

4

3 に答える 3

2

あなたは大丈夫なはずです。CPU を集中的に使用するバックグラウンド タスクの優先度を下げて、GUI や他のアプリからの「通常の」応答を許可することは、スレッドの優先度を変更するためのより良い使用方法の 1 つです。

スレッドの優先順位を下げても、CPU 以外のリソースに大きな影響を与えることはありませんが、IME を実行する価値はあることに注意してください。

アプリの実行中に Firefox、Office、VLC などを使い続けたい場合は、そうです、CPU 負荷の高いスレッドの優先度を下げます。その後、結果が最終的に出るのを待っている間に、SO をブラウズしたり、いくつかのアルバムを聴いたり、いくつかの映画を見たりできるはずです :)

于 2012-09-05T15:21:29.627 に答える
1

スレッドの優先度を変更したい場合は、それが自分で作成したものであることを確認する必要があることに注意してください。スレッド プール スレッドの優先度を変更するのは良くありません。TaskSchedulerこれは、スレッド プールを使用しないを作成する準備ができていない限り、新しいタスク機能を避けることを意味します。

シナリオに適している場合は、代わりにプロセスの優先度を設定することも検討してください。詳細については、 MSDNを参照してください。これはスレッドに等しく影響します。

編集:追加情報をありがとう。コードが IIS でホストされているようです。この回答から、IIS がThreadPool.QueueUserWorkItemと同じスレッド プール (標準の .NET スレッド プール) を使用していることを確認できます。したがって、スレッド プール スレッドの優先度を変更してはなりません。これらのスレッドは IIS に属します。

独自のスレッドを作成できます。しかし、このように IIS でバックグラウンド操作をホストしようとするのはお勧めできません。たとえば、アプリ プールがいつリサイクルされるかはわかりません。

  • 他のいくつかのオプションを検討することをお勧めします。バックグラウンド操作が長時間実行される可能性があるための最適なソリューションは、ワークフロー サービスのようです。AppFabric Server と組み合わせて使用​​すると、これらは非常に強力であり、状況を処理するかのように健全です。
  • より簡単な方法は、プロセスを IIS の外に移動することです。おそらく、ユーザーのアクションによってアイテムに削除のマークが付けられ、IIS の外部でスケジュールされたタスクが実行され、低速な操作が実行される可能性があります。
于 2012-09-05T15:27:29.440 に答える
0

私は ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback( MyDeleteMethod ), itemsTobeDeleted )を使用します

MyDeleteMethodでは、削除プロセスをさまざまな一括で分割することを検討できます。つまり、delete メソッドを実行するたびに削除する行の最大数を指定できます。

db プールで使用可能な接続の数が心配な場合は、(タイマーを使用して) 静的オブジェクトを定義し、そのリストにitemsTobeDeletedを追加することでパフォーマンスを向上させることができます (同期アクセスにはロックを使用する必要があります)。timer Elapsed イベントが発生するたびに、一括削除を実行できます (たとえば、5,000 レコードがあり、それらを 500 x 500 で削除します)。

于 2012-09-06T11:17:31.887 に答える