1

読んだ後、C#文字列(およびその他の.NET API)のサイズは2GBに制限されていますか?.NET3.5で大きな文字列と配列を試してみました。割り当てることができる最大の配列はint.MaxValue - 56バイトであることがわかりました。文字列についても同様です。取得できる最大の文字は(int.MaxValue - 58) / 2文字でした(各文字は2バイトを使用したため)。その後、スローしOutOfMemoryExceptionます。

なぜこの制限が存在するのですか?実際に遭遇したことはありません。.NETの内部動作に興味があります。

はい、もちろん、これは十分なRAMを備えた64ビットマシン上にありました。もちろん、プロセスは64ビットプロセスとして実行されていました。(実際には、このような配列または文字列を3つ割り当てて、合計メモリ使用量を6GBにすることができます。)

4

2 に答える 2

1

x64でも、GCヒープ上のオブジェクトのサイズを2GBに制限することは設計上の決定でした。設計決定に関与した人の1人からの良いブログ投稿がここにあります:

http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx

于 2010-06-25T07:27:44.750 に答える
1

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

于 2012-06-26T06:46:19.817 に答える