2

これは興味深いものです。まずセットアップ:

  • 8GBのRAM
  • ウィンドウズ 7 プロ x64
  • VS2010 アルティメット

LINQ/PLINQ を使用してデータを処理するメモリ集約型アルゴリズムがあります。初期の実装は PLINQ に依存していました。単体テストは成功します。しかし、驚くべきことに、PLINQ と LINQ を使用することでどのようなパフォーマンス上の利点が得られるかを確認しようとしているときに、並列処理が無効になっている場合、同じテストが OutOfMemoryException で失敗します。

合理的な説明はありますか?私はそれを一貫して再現できます。私はチェックしませんでしたが、メモリではなく、スレッドモデルに応じて異なる方法で割り当てられるリソースが不足している可能性がありますか? アイデア?

4

1 に答える 1

3

.net の 1 つのオブジェクトは、64 ビットであっても 2 GB に制限されています。PLINQ を使用していない場合は、一部のオブジェクト (リストなど) が 2 ギガバイトを超えてクラッシュしていると推測できます。PLINQ を使用すると、作業が分割されるため、すべて 2 GB 未満の複数のリストが作成されると思います。

詳細を説明することは不可能ですが、いくつかのコードを投稿してください。

于 2011-11-10T05:26:34.523 に答える