我正在对使用 .net 4.5 Asp.net + Unity 3.0.1304.1 + Nhibernate 3.3.1.4 编写的应用程序进行故障排除,该应用程序的内存消耗达到 3 到 5 GB,高于预期。
在收集了一些内存转储后,很明显大对象堆上有碎片。
我的第一个想法是将应用程序更新到 .net 4.5.1 并告诉 GC 压缩 LOH,但我注意到固定对象数组的数量,这导致了一个演示应用程序可以得出结论,堆压缩不是在固定对象场景中很有帮助,并且在没有固定对象时甚至没有必要,因为没有碎片。
所以我试图跟踪这个固定的对象并遇到了这个问题,据说静态成员负责那些固定的对象并且句柄位于高频堆上。
我的问题是:
- 我该如何继续尝试解决碎片问题?
- 由于我从 WinDbg 知道的命令不起作用,如何获得有关高频堆的更多信息?
以上来自windbg的一些打印: