オプションでスレッドプールmaxthreadsをオーバーライドできるいくつかの(c#3.5)バッチ処理コードを作成しました。スレッドセーフではないかなり重いリソースを使用するため、アクティブなスレッドごとにアイテムを使用して「リソースプール」を維持する必要があります。消費するアプリケーションは、バッチプロセッサが使用するスレッドの数に制限を設定できます。これにより、が呼び出されますThreadPool.SetMaxThreads()
。手動で制限を設定すると、デフォルト設定のままにするよりもパフォーマンスが向上するかどうかをテストするためにこれを行っています。
私の質問は、バッチ処理コードを使用するたびに、maxthreadsをアプリケーションの以前の値にリセットする必要があるかどうかです。1日を通して断続的に、場合によっては数千回も呼び出されます。MaxThreadsの制限は、アプリケーションが再起動されるか、別の値に設定されるまで永久に持続しますか、それとも自動的にリセットされますか?
これは私のテストハーネスでは実際には問題ではありませんが、本番環境で使用するためにバッチが完了した後に他のリソースが破棄されたときに、スレッドプールを「リセット」するようにコードを更新する必要があるかどうか疑問に思っています。オーバーライドしたままにしておくことには何か影響がありますか?
最後に、1つの.netアプリケーションでスレッドプールを設定すると、ボックス上のすべてのアプリケーションに設定されますか、それともその単一のアプリのコンテキストにのみ設定されますか?