据我所知,在.NET中,单个实例的限制为2GB。由于我主要在32位操作系统上工作,因此并没有太关注这一点。在32位上,它更多地是人为的限制,不过我很惊讶地发现,这种限制也适用于64位.NET。
由于像List<T>
这样的集合使用数组来存储项目,这意味着在32位上运行的.NET应用程序能够比在64位上运行的同一应用程序在列表中存储两倍的引用类型项目。在我看来,这相当令人惊讶。
有人知道CLR 4.0是否解决了这个限制吗(我目前手头没有4.0安装)。
据我所知,在.NET中,单个实例的限制为2GB。由于我主要在32位操作系统上工作,因此并没有太关注这一点。在32位上,它更多地是人为的限制,不过我很惊讶地发现,这种限制也适用于64位.NET。
由于像List<T>
这样的集合使用数组来存储项目,这意味着在32位上运行的.NET应用程序能够比在64位上运行的同一应用程序在列表中存储两倍的引用类型项目。在我看来,这相当令人惊讶。
有人知道CLR 4.0是否解决了这个限制吗(我目前手头没有4.0安装)。
编辑:我也应该提到这一点——我认为在.NET 4中,这种行为并没有发生任何变化。自.NET开始以来,这种行为就没有改变过。
编辑:.NET 4.5现在将在x64中提供选项,通过在app.config中设置gcAllowVeryLargeObjects来明确允许对象大于2GB。
.NET Framework 4.5允许在64位平台上创建大于2GB的数组。这个功能默认没有开启,必须通过配置文件使用gcAllowVeryLargeObjects元素来启用。
http://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx
uint.MaxValue
个元素的int[]
有多大? - Marc Gravellbyte[]
,那么你的限制是4GB。 - binki在数字领域中,这是一件大事。任何在.NET中使用数字类库的人都将它们的矩阵存储为数组。这样可以调用本地库来进行数值计算。2GB的限制严重制约了64位.NET中可能存在的矩阵大小。更多信息。