2010-11-30 22 views
2

.NETでのオブジェクトの2ギガバイトのサイズ制限があるようです:How to run Fsi.exe in 64 Bits?の.Netオブジェクトのサイズ制限

は、この問題を回避はありますか?私は非常に大きな浮動小数点配列(10 GB)をメモリにロードしてから、 を実行したいと思います。

おかげ

+0

何の配列ですか? –

+0

@Torben Rahbek Koch編集の感謝を参照してください – jlezard

答えて

8

.NETでも64ビット・プラットフォーム上で最大2ギガバイトまでの任意のオブジェクトを制限します。複数のオブジェクトを使用してより多くのデータを格納する独自のデータ型を作成し、1つのオブジェクトの2 GBの制限を回避することができます。たとえば、List<float[]>は2GB以上を格納できますが、1つの大きな配列と同様に動作するように、必要な配管コードを記述する必要があります。

this questionもチェックしてください。

+0

ありがとう。たとえば、JavaとPythonの制限は何ですか? – jlezard

+0

@ jlezard:申し訳ありませんが、JavaとPythonの仕様についてお手伝いできません。 IronPythonは.NET上で実行されるのと同じ制限がありますが、それ以外は私が言うことはできません。 –

2

私はこのための簡単な回避策はないと思う私には、オブジェクトのサイズに2Gbの制限なしでヒープを実装するのが難しいかもしれないようです。

多分、データをどのように破壊する方がよいでしょうか。配列のように振る舞い、データを固定サイズのチャンクに分割するクラスを書くことは可能です。

+0

.Net 4.5では、この2 GBの制限はもう画像にありません://bhrnjica.net/2012/07/22/with-net-4-5-10-years-memory-limit-of-2-gb- is-over/ – RBT

3

4.5より前のバージョンの.NETでは、オブジェクトの最大サイズは2GBです。 gcAllowVeryLargeObjectsが有効になっている場合、4.5以降のより大きなオブジェクトを割り当てることができます。 stringの制限は影響を受けませんが、リストは配列によってサポートされているため、「配列」も「リスト」をカバーする必要があります。

+3

gcAllowVeryLargeObjectsに上限がありますか? – Umer