我正在使用ANTS内存分析器来诊断我在我的一个.NET 2.0应用程序中遇到的内存泄漏的增加。 我在7.5小时内拍摄了7张快照,这里是获得数据的表格表示 -
G1代表1代尺寸和G2代2尺寸。除非托管空间和专用字节外,所有其他值均以MB为单位。
我的问题是 -
为什么即使堆大小很低,也有如此高的未使用的.NET空间?
我的大对象堆最多大约2 MB,在最后3个快照中仍然是96 KB。那么为什么会出现这么高的大碎片,它们是否会占用很多未使用的空间呢?
不受管理的空间不断增加。这会导致私人字节随着时间的推移而增加吗?
我最终解决了这个问题,已经进行了多次分析,但无法找到合适的解决方案。我准备提供所需的任何其他数据。
答案 0 :(得分:2)
正如亚历克斯已经指出了一个非常好的解释问题类的大对象堆碎片在这里找到:
https://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/
这个问题在.NET FX开发团队中是众所周知的,并且一直在努力。 使用最近的FX版本很可能会出现症状消失。
从.NET 4.5.1开始,将会有一个GC方法调用甚至压缩LOH: http://blogs.msdn.com/b/mariohewardt/archive/2013/06/26/no-more-memory-fragmentation-on-the-large-object-heap.aspx 然而,找到LOHF的根本原因比仅仅擦除堆耗尽吨的ms更有效率
如果您需要进一步了解如何隔离这些影响,请告诉我。
的Seb