我正在尝试在需要创建新列表之前计算列表的最大安全大小。我正在考虑根据类型使用数据结构的大小,然后除以1 GB(因为2 GB是< .Net 4.5限制),看看有多少元素可以安全地放在列表中。也许maxnumber - 3,如果是开销而不是。
你的想法?
答案 0 :(得分:1)
如果您的列表包含结构,您的方法将起作用,但您需要考虑内存对齐(它可能导致错误超过3 ...)。如果它是引用类型,则元素大小为4(在32位CLR上)或8(在64位CLR上)。
但是,如果这对您来说甚至是个问题,您应该考虑使用替代方案。要么将整个列表存储在别处(数据库?)并将所需的部分存储到内存中,要么使用不同的数据结构,例如列表列表(基本上将数据分段),在每个小列表中放置100,000个元素。
答案 1 :(得分:1)
你应该能够获得由几乎2Gb的字节数组支持的项目列表(如果你试图动态增长列表,由于重新分配状态,它显然会失败接近最大大小的一半)。
如果您的数据不是不可变的,您可能会考虑GC不友好的方法,它不会在LOH上创建许多对象。尝试将所有分配定位到LOH分配限制(我认为85Kb)并测量代码是否表现更好。