コードで並列forループを使用して、多数のエンティティ(12,000)で長時間実行されるプロセスを実行しています。
このプロセスは文字列を解析し、いくつかの入力ファイルを調べ(IOベースのものの数を考えると、スレッド化の利点は疑わしいかもしれませんが、他の場所ではスピードアップしたようです)、一致した結果を出力します。
最初は、プロセスは非常に高速に進行しますが、最終的にはクロールが遅くなります。特にトリッキーな入力データの数にヒットした可能性がありますが、これは物事を詳しく調べている可能性は低いようです。
ループ内に、反復の開始/終了時に「Started Processing:」と「FinishedProcessing:」を出力するデバッグコードを追加し、最初にどのIDであるかを見つけるために、開始と終了をペアにするプログラムを作成しました。クラッシュを引き起こします。
ただし、一致しないIDの数を見ると、プログラムは一度に400を超える異なるエンティティを処理しているように見えます。これは、IOの数が多い場合、問題の原因である可能性があるようです。
だから私の質問はこれ(これら)です:
- 一致しないIDを適切に解釈していますか、それとも、欠落している舞台裏で巧妙なものがありますか、それとも明らかなものがありますか?
- 私が見つけたものが正しいことに同意する場合、スピンオフして一度に実行する数を制限するにはどうすればよいですか?
これはおそらくやや非正統的な質問であり、コードがないため答えるのが難しいかもしれませんが、助けていただければ幸いです。さらに情報が必要な場合は、コメントでお知らせください。