【问题标题】:.NET object size limit.NET 对象大小限制
【发布时间】:2010-11-30 09:26:13
【问题描述】:

.NET 中的对象似乎有 2 GB 的大小限制:How to run Fsi.exe in 64 Bits?

有解决办法吗?我想在内存中加载一个非常大的浮点数组(10 GB),然后做一些工作。

【问题讨论】:

  • @Torben Rahbek Koch 查看编辑谢谢

标签: .net


【解决方案1】:

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

您可能还想查看this question

【讨论】:

  • 谢谢。例如,您知道 Java 和 Python 的限制是什么吗?
  • @jlezard:抱歉,我无法帮助您了解 Java 和 Python 的细节。 IronPython 将具有与在 .NET 上运行相同的限制,但除此之外我不能说。
【解决方案2】:

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

【讨论】:

  • gcAllowVeryLargeObjects 有上限吗?
【解决方案3】:

我不认为有一个简单的解决方法,在我看来,在对象大小没有 2Gb 限制的情况下实现堆可能会很困难。

也许您最好以某种方式分解数据。应该可以编写一个行为类似于数组但在后台将数据拆分为固定大小的块的类。

【讨论】:

  • 使用 .Net 4.5 这个 2 GB 限制不再出现在图片中 https://bhrnjica.net/2012/07/22/with-net-4-5-10-years-memory-limit -of-2-gb-over/
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多