3

IIS でホストされている WCF サービスで Parallel.ForEach を使用しています。

私が知る限り、並列ループの各タスクについて、スレッドが開かれます。

ただし、IIS には、開くことができるスレッドの数に制限があります。20だと思います。

私の質問は、IIS プロセスで Parallel.ForEach を使用することをお勧めしますか?

4

1 に答える 1

4

私の知る限り、IISでTPLを使用する場合にはいくつかの問題があります。

まず、IISにはスレッドプール内のスレッドに対する厳しい制限がありません。それは実際にはスレッドが何をしているかに依存します(CPUバウンド、IOバウンドなど)。したがって、スレッドの数自体はそれほど重要ではありません。

第二に、私が理解しているように、TPLはスレッドプールからスレッドを取得します。したがって、実際には、リクエストの処理に使用できるスレッドを使用しています。繰り返しますが、これは、消費しているトラフィックの量によっては悪い場合があります。

第三に、IISアプリケーションプールはリサイクルされます。これが発生すると、私が理解しているように、IISはスレッドの状態をフリーズし、別のプロセスに移動します。これは、スレッド化された操作に意図しない影響を与える可能性があります。

通常、Parallel.ForEachプロセスが長時間実行されるため、TPL()を使用します。長時間実行されるプロセスの場合は、別のホスト(Windowsサービス)を呼び出して手間のかかる作業を行う方がよい場合があります。たとえば、Windowsサービスでは、スレッドの管理方法をより細かく制御できます。

お役に立てれば。

于 2012-08-08T08:56:50.680 に答える