据报道,我的一个应用程序使用了 5 GB 内存,当我转储进程并在 Windbg 中进行分析时,我可以看到总提交大小为 5 GB,如报告的那样,但总托管堆尺寸仅为 1.6 G。
问题:当堆大小只有几G时,什么会导致提交大小如此之大,我可以看到MEM_COMMIT大小几乎全部被PAGE_READWRITE部分使用,可能是内存碎片吗?
状态大小 MEM_COMMIT 5.653 GB MEM_RESERVE 2.597 GB
GC 堆大小:大小:0x67cefd88 (1741618568) 字节。
最佳答案
是的,托管堆中未考虑的提交大小可能来自非托管堆中的碎片。命令!heap -s将在windbg中显示它们。 您也可以使用VMMap快速排除其他类型的内存分配数据。
关于.net - 高提交内存但堆大小小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642962/