【发布时间】:2012-04-11 04:16:30
【问题描述】:
我遇到了 c# 中的 2gb 对象限制(由于某些烦人的原因,这甚至适用于 64 位),并且有大量结构(预计总大小为 4.2 gig)。
现在显然使用 List 会给我一个大小为 4.2gb 的列表,但会使用由较小列表组成的列表,这些列表又包含一部分结构,允许我跳过这个限制吗?
我的理由是,这只是 CLR 中的硬编码限制,它阻止我在 64 位平台上实例化 9gig 对象,它与系统资源完全无关。列表和数组也是引用类型,因此包含列表的列表实际上只包含对每个列表的引用。因此没有一个对象超过大小限制。
这有什么不可行的原因吗?我现在会亲自尝试,但我手头没有内存分析器来验证。
【问题讨论】:
-
一个有趣的 C# 问题已经 4 分钟没有答案。我感觉到 Jon Skeet 正在接近……
-
出于好奇,它必须是
List<T>还是List<List<T>>?你能用LinkedList<T> -
@JamesMichaelHare 你可以,但是你会有大量的额外开销,因为每个
LinkedListNode<T>都是一个独立的类,有多个引用。 -
@digEmAll 如果你的结构足够大,那么它根本不应该是一个结构......设计指南说任何> 16字节的对象都应该是一个类:@987654322 @
LinkedListNode<T>单独有 3 个引用,在 x64 上,单独是 24 个字节......你也有完全不同的性能语义与 LinkedList 与 List。
标签: c# memory memory-management reference 64-bit