1. ホーム
  2. c#

C# : メモリ不足の例外

2024-01-02 09:41:36

質問

今日、私のアプリケーションで OutOfMemoryException . 私は4GBのRAMと多くの仮想メモリを持っているので、私にとってこれは常にほとんど不可能でした。このエラーは、既存のコレクションを新しいリストに追加しようとしたときに発生しました。

List<Vehicle> vList = new List<Vehicle>(selectedVehicles);  

私の理解では、新しいリストが含むべき車両がすでにメモリ内に存在しているので、ここで割り当てられるメモリはそれほど多くありません。私は認めなければなりません Vehicle は非常に複雑なクラスであり、一度に約 50,000 のアイテムを新しいリストに追加しようとしました。しかし、すべての Vehicle は 200MB しかないデータベースから取得したものなので、何が原因で OutOfMemoryException を引き起こす可能性があるのか見当もつきません。

どのように解決するのですか?

2点です。

  1. 32 ビット Windows を実行している場合、4 GB すべてにアクセスすることはできず、2 GB しかありません。
  2. の基礎となる実装は List は配列であることを忘れないでください。メモリが激しく断片化されている場合、配列に割り当てるのに十分な連続した領域がない可能性があります。 List を割り当てるのに十分な連続した領域がない可能性があります。