PLINQ を使用して操作をデータ並列化しています。各スレッドは、アルゴリズムの設定に基づいて変化する非常に大量のメモリを消費します。アルゴリズムのオプションに基づいて必要なメモリの量を事前に計算する簡単な方法はありません。メモリ要件が低い場合、スレッドの最適な数は、システムの合計 8 つのうち 7 つです。メモリ要件が高い場合、2 つのスレッドは 1 つよりも大幅に改善されますが、3 つのスレッドが使用されると、システムはページング ファイルにヒットし始め、CPU 使用率は 0 に低下し、パフォーマンスは数百倍悪化します。
私ができるようにしたいのは、メモリ負荷を監視しながら、PLINQ でスレッドの数を段階的に増やし、システムが使用可能な物理メモリを使い果たしたら、最後のスレッドにキャンセル トークンを設定して、メモリをロールバックできるようにすることです。他のスレッドが最適に実行できるようにします。
この動作を PLINQ から取り除く方法についてのアイデアはありますか、それとも完全に独自のものにする必要がありますか?