1

ParallelForEachを使用して並列AsyncCodeActivitiesを実行するためにワークフローを使用しています。その間、アクティビティの数が非常に多い場合(たとえば、1000の非同期アクティビティ)、コードの実行中にSystem.OutOfMemory例外が発生します。

コードをデバッグしてこれについて詳しく調べたところ、プロセスが完了していても、一連の非同期コードアクティビティに対して「EndExecute」メソッドが呼び出されていないことがわかりました。このため、メモリは解放されずに絶えずスタックされ、最終的にSystem.OutOfMemory例外が発生します。スレッドの数を8(マシンのプロセッサの数)に減らしようとしましたが、それでも例外が発生します。

親切に私を助けてください、そして私は一週間以上この問題で立ち往生しています。私は他のどこからでも解決策を見つけることができませんでした。

4

1 に答える 1

0

.NET Framework 4.0 を使用している場合は、SetMaxThreads() を呼び出して最大スレッド プール サイズをより低い数値に制限することが役立つと思います。GetMaxThread() を呼び出すと、デフォルトの最大スレッド サイズを取得できます。

現在、メモリが使用可能になるまでランタイムがスレッドプール スレッドを割り当て続けるため、OutOfMemory 例外がスローされます。

各アクティビティに必要なメモリに応じて、この数を調整する必要がある場合があります。

于 2013-03-28T15:07:52.880 に答える