私は2GBのマシンを持っています。exe を実行する前に、1.1 GB の空きメモリがありました。以下にある 1 行だけの exe を実行すると、メモリ不足の例外が発生します。
次の行で約 6 億バイトが使用されると予想しています。MemoryStream クラスは、初期化された容量よりも多くのメモリを使用しますか?
MemoryStream memory = new MemoryStream(600000000);
私は2GBのマシンを持っています。exe を実行する前に、1.1 GB の空きメモリがありました。以下にある 1 行だけの exe を実行すると、メモリ不足の例外が発生します。
次の行で約 6 億バイトが使用されると予想しています。MemoryStream クラスは、初期化された容量よりも多くのメモリを使用しますか?
MemoryStream memory = new MemoryStream(600000000);
次の Q&A によると、EXE が 600 MB の連続したメモリを割り当てることができないことが原因である可能性があります。(私はドキュメントで何かを見つけようとしていました.これは私がすぐに思いつくことができる最高のものです.)
「十分なストレージがないために「メモリ不足」エラーが発生することはほとんどありません。これまで見てきたように、ストレージはディスク領域であり、最近のディスクは巨大です。むしろ、「メモリ不足」エラーは、プロセスが要求されたマッピングを実行するのに十分な大きさの連続した未使用ページのセクションが仮想アドレス空間で見つかりません。」
興味深いことに、その回答はEric Lippert のブログ投稿 にリンクされています。 .aspx
@SethFlowers の提案を裏付けるドキュメントを見つけました (アプリケーションが十分な大きさの連続したメモリ ブロックを見つけられないということ)。
新しいプロセスを初期化すると、ランタイムはプロセス用にアドレス空間の連続した領域を予約します。この予約済みアドレス空間はマネージド ヒープと呼ばれます。
.NET のメモリ使用量と、アプリケーションのメモリ使用量をプロファイルする方法についての追加説明を次に示します。