非常に大きなバイトの「キューブ」を作成しようとしているアプリがあります。3 次元配列 (~1000x1000x500) は、関心のあるすべての値を保存しますが、メモリの問題から抜け出しています。これは予期されていたことですが、私が受け取ったさまざまな OOM メッセージの動作は非常に混乱しています。初め:
Foo[,,] foo1 = new Foo[1000, 1000, 500];
OOM エラーで失敗しますが、これは起こりません:
Foo[,,] foo1 = new Foo[250, 1000, 500];
Foo[,,] foo2 = new Foo[250, 1000, 500];
Foo[,,] foo3 = new Foo[250, 1000, 500];
Foo[,,] foo4 = new Foo[250, 1000, 500];
これら 2 つのコード セットは、本質的に同じ量のメモリを消費するべきではありませんか?
また、最初は ~1.5GB が消費されたときにエラー メッセージが表示されていましたが、64 ビット アプリケーションに切り替えることで、失敗する前により多くのメモリを使用できるようになると思いました。
スタック スペースの制限に達していますか? もしそうなら、スタック上に (単一のエンティティとして) 存在する必要なしに、この構造をヒープ上で完全にインスタンス化するにはどうすればよいでしょうか?
前もって感謝します - 誰もがこの振る舞いに打ち勝つことができる光を楽しみにしています.