.NET对象大小限制

7

在.NET中,对象的大小限制似乎为2 GB:如何在64位上运行Fsi.exe?

有没有绕过这个限制的方法?我想将一个非常大的浮点数组(10 GB)加载到内存中,然后进行一些操作。


@Torben Rahbek Koch,看一下编辑,谢谢。 - jlezard
3个回答

13

.NET在64位平台上也将任何对象限制为最大2GB。您可以创建自己的数据类型,使用多个对象来存储更多数据,从而绕过单个对象的2GB限制。例如,List<float[]>可以让您存储超过2GB的数据,但您需要编写必要的代码使其行为类似于单个大数组。

您可能还想查看此问题


谢谢。您知道Java和Python的限制是什么吗? - jlezard
@jlezard:抱歉,我无法为您提供Java和Python的具体信息。IronPython由于在.NET上运行,因此会有相同的限制,但除此之外,我无法确定。 - Brian Rasmussen

5

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


4
gcAllowVeryLargeObjects有上限吗? - Umer

2

我认为这个问题没有简单的解决方案,似乎在没有2GB对象大小限制的情况下实现堆可能会有困难。

也许您最好将数据分段处理。可以编写一个类,它像数组一样运行,但在内部将数据分割成固定大小的块。


随着 .Net 4.5 的出现,这个 2 GB 的限制已经不再存在了。https://bhrnjica.net/2012/07/22/with-net-4-5-10-years-memory-limit-of-2-gb-is-over/ - RBT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接