かなり大きな二重配列12000ish x 55000ishを作成する必要があります。残念ながら、メモリ不足例外が発生します。私はJavaで開発していましたが、メモリ設定を変更する可能性がありました。これはC#で可能ですか、それとも不可能なのでしょうか?私はVS 2008を使用しています。大規模配列の宣言時にOutOfMemoryExceptionが発生する
答えて
各double
は8バイトなので、5GBを少し上回る1つのアレイを割り当てようとしています。 CLRは、64ビットCLRの場合でも、オブジェクト単位の制限が約2GB IIRCです。言い換えれば、使用可能なメモリの総量ではありません(ただし、に十分なメモリがある場合はには問題があります)が、オブジェクト単位のサイズです。
私はあなたを小さな配列に分割することをお勧めします。おそらく何らかの説明のファサードの後ろにあります。私は、単一配列の限界を回避する方法はないと信じています。
EDIT:あなたは配列の配列のために行くことができる - ジャグ配列別名:
double[][] array = new double[12000][];
for (int i = 0; i < array.Length; i++)
{
array[i] = new double[55000];
}
それはあなたに受け入れられるだろうか?
(つまり、同じオブジェクトごとのサイズの問題を抱えていると同じようにあなたが矩形配列(double[,]
)を使用することはできません。)
あなたはメモリ不足(いくつかのプログラムを閉じる)か、メモリ割り当て制限(約2Gb)に達していますか、このメモリは連続ブロックである必要があります。あなたは64ビットマシンを使用することができます。その場合、より多くのメモリを利用できます。あるいは、アプリケーションが大規模なアドレスを認識できるようにすることができます(この場合、可能であれば、グーグルがこれを行う方法を教えます)。
大規模なアドレス認識のために、Boot.iniファイルに/ 3GBスイッチを追加すると思います。
あなたが2GBを超えるオブジェクトを作成することはできませんので、あなたがMemoryMappedFileを使用しようとすることができ必要なサイズのメモリチャンクで作業します。
var data = MemoryMappedFile.CreateNew("big data", 12000L * 55000L);
var view = data.CreateViewAccessor();
var rnd = new Random();
for (var i = 0L; i < 12000L; ++i)
{
for (var j = 0L; j < 55000L; ++j)
{
var input = rnd.NextDouble();
view.Write<double>(i * 55000L + j, ref input);
}
}
あなたの総メモリが十分であることを提供し、あなたは小さなアレイの束を作成し、単一IList<T>
、または他のいくつかのインデックス付きのインタフェースでそれらをラップすることにより、LOHの断片化に起因するメモリの例外のうち防ぐことができます。
BigArray<T>, getting around the 2GB array size limit
クレジット:this post (C# chunked array)ここ
は、それを説明するリンクです。
- 1. 文字配列宣言時にバッファオーバーフローが発生する
- 2. 大規模配列のグローバル宣言はどのようにC言語で動作するのですか?
- 3. セグメンテーションフォールト、大規模配列
- 4. 大規模なperlの配列のスローダウン
- 5. 大規模なPHP配列ページ設定
- 6. 大容量ファイルの処理時にRegexのOutOfMemoryExceptionが発生する
- 7. C言語で巨大な配列をローカルに宣言する
- 8. 3次元配列の宣言によってセグメント化エラーが発生する
- 9. 大規模な配列をSQLiteにキャッシュする - Java/Android
- 10. は、大規模な配列を作りたい大numpyのアレイ
- 11. Pythonで大規模な配列を扱うには?
- 12. c#配列宣言構文vs C++配列宣言構文
- 13. 大きなファイルをmmapingする(永続的な大規模配列の場合)
- 14. 中規模大規模プロジェクトの構造
- 15. CUDAでの大規模配列の問題
- 16. VB.NETで実行時に配列を宣言する方法
- 17. 大規模な配列とjavacriptの比較
- 18. Android:大規模な配列を扱うためのベストプラクティス
- 19. mySQLテーブルからの超大規模行列の生成?
- 20. Pythonの大規模配列のサマリー統計をインクリメンタルに計算する
- 21. C言語の宣言時に2次元配列を初期化する
- 22. 大規模なDOMでクロムイベントトリガーに時間がかかります
- 23. 配列の型宣言
- 24. 大きな配列の割り当て。 OutOfMemoryException VS OverflowExceptionが
- 25. TestFlightAppをベータテスターの大規模なローカル配信に使用する
- 26. cPickleを使用して大規模な辞書を直列化すると、MemoryErrorが発生します。
- 27. C charの配列を宣言する*
- 28. Javaのlong []配列を宣言する
- 29. ポインタオブジェクトの2D配列を宣言する
- 30. PHP複雑な大規模な配列を単純にする方法
A *かなり*大きな配列? :) – Groo
私はあなたが "メインメモリ"のデータ構造(すなわちデータベース)の外を考えることをお勧めします。なぜあなたはそのような大きなダブル配列を格納する必要がありますか? – bitxwise
私は「公正に」という言葉の選択で笑った。 –