gpt4 book ai didi

C# List 内存不足异常但远离 2Gb 限制

转载 作者:太空狗 更新时间:2023-10-29 21:08:26 29 4
gpt4 key购买 nike

我有一个 List<Matrix4> , 其中Matrix4是一个包含 16 个 float 的结构,因此它使用 16 * 4 字节 = 64 字节。

当我开始向列表中添加项目时,当我超过 100 万行时它会抛出内存不足异常。

我知道 .NET 对每个对象有 2Gb 的限制,但除非我完全疯了:

1.000.000 * 64 字节 = ~61mb

这甚至还没有接近极限。

当我开始填充列表时,根据任务管理器,我的应用程序使用了 896mb,当我遇到异常时它使用了 1028mb。

计算机有 8GB 的​​物理内存,但它只使用了 6Gb。

关于为什么会发生的任何线索?

---更新----

将平台目标更改为 x64 解决了单独测试项目中的问题。不幸的是,原始项目不能是 x64,因为引用了不能在 x64 上运行的 x86 DLL。但这是另一个问题。

我没有考虑将其更改为 x64,因为它似乎远离内存限制,但我猜 Hans Passant 是正确的,122mb 距离 1.3Gb 限制太近了。谢谢大家。

最佳答案

大型结构是在大型对象堆 (LOH) 上完成的,并且容易产生碎片。

因此,虽然您可能有足够的空闲内存,但您可能没有剩余 1 个足够大的内存块。

您的数字 (1M x 64) 本身是不够的,只有进行足够的其他分配才能解释这个问题。您可以尝试解决这个特定问题,但这可能只是一个更大的问题变得可见的地方。

一般来说,TaskManager 不是诊断内存问题的正确工具。您需要一个内存分析器来找出发生了什么。

这还取决于您的平台版本以及它是 32 位还是 64 位。

关于C# List<T> 内存不足异常但远离 2Gb 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146667/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com