在.NET中,对象的大小限制似乎为2 GB:如何在64位上运行Fsi.exe?
有没有绕过这个限制的方法?我想将一个非常大的浮点数组(10 GB)加载到内存中,然后进行一些操作。
在.NET中,对象的大小限制似乎为2 GB:如何在64位上运行Fsi.exe?
有没有绕过这个限制的方法?我想将一个非常大的浮点数组(10 GB)加载到内存中,然后进行一些操作。
.NET在64位平台上也将任何对象限制为最大2GB。您可以创建自己的数据类型,使用多个对象来存储更多数据,从而绕过单个对象的2GB限制。例如,List<float[]>
可以让您存储超过2GB的数据,但您需要编写必要的代码使其行为类似于单个大数组。
您可能还想查看此问题。
在 .NET 4.5 版本之前,最大对象大小为2GB。从 4.5 版本开始,如果启用了 gcAllowVeryLargeObjects,则可以分配更大的对象。请注意,string
的限制不受影响,但是“数组”应该包括“列表”,因为列表是由数组支持的。
我认为这个问题没有简单的解决方案,似乎在没有2GB对象大小限制的情况下实现堆可能会有困难。
也许您最好将数据分段处理。可以编写一个类,它像数组一样运行,但在内部将数据分割成固定大小的块。