1

阅读后C# 字符串(和其他 .NET API)的大小是否限制为 2GB?我在 .NET 3.5 中使用过大字符串和数组。我发现我可以分配的最大数组是int.MaxValue - 56字节。字符串的类似情况:我能得到的最大的是(int.MaxValue - 58) / 2字符(因为每个字符占用 2 个字节)。之后它抛出OutOfMemoryException

为什么会存在这种限制?并不是说我在实践中遇到过它——我只是对 .NET 的内部工作原理感到好奇。

是的,这当然是在具有大量 RAM 的 64 位机器上 - 是的,该进程作为 64 位进程运行。(我实际上可以分配 3 个这样的数组或字符串,总内存使用量为 6GB。)

4

2 回答 2

1

在 4.5 之前的 .NET 版本中,最大对象大小为 2GB。从 4.5 开始,如果启用了 gcAllowVeryLargeObjects ,您可以分配更大的对象。请注意,限制string不受影响,但“数组”也应涵盖“列表”,因为列表由数组支持。

于 2012-06-26T06:46:19.817 回答
1

将 GC 堆上的对象大小限制为 2GB 是一个设计决定,即使在 x64 上也是如此。一位参与设计决策的人在这里发表了一篇关于它的好博文:

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

于 2010-06-25T07:27:44.750 回答