RBa*_*iak 6 .net c# out-of-memory
我有一个List<Matrix4>,其中Matrix4包含16个浮点数的结构,所以它使用16*4字节= 64字节.
当我开始向列表添加项目时,当我跨越100万行时,它会抛出Out Of Memory Exception.
我知道.NET每个对象的限制为2Gb,但除非我完全忘记了:
1.000.000*64字节= ~61mb
哪个甚至没有接近极限.
当我开始填充列表时,根据任务管理器,我的应用程序正在使用896mb,当我到达异常时它使用1028mb.
这台电脑有8GB的物理内存,但它只使用6Gb.
有关原因的任何线索可能会发生吗?
---更新----
将平台目标更改为x64解决了单独测试项目的问题.不幸的是原始项目不能是x64因为引用x86 DLL不能在x64上运行.但这是另一个问题.
我没有考虑将它改为x64,因为它似乎远离内存限制,但我认为Hans Passant在120mb上距离1.3Gb限制太近了.谢谢你们.
Hen*_*man 11
在大对象堆(LOH)上进行大型结构,并且可能会出现碎片.
因此,虽然你可能有足够的可用内存,但你可能没有足够大的内存块.
你自己的数字(1M x 64)是不够的,只有足够的其他分配才能解释这个问题.您可以尝试解决此特定问题,但这可能只是更大问题变得可见的问题.
通常,TaskManager不是诊断内存问题的正确工具.你需要一个内存分析器来找出发生了什么.
它还取决于您的平台版本以及它是32位还是64位.