【发布时间】:2018-09-17 15:34:14
【问题描述】:
我正在对使用 .net 4.5 Asp.net + Unity 3.0.1304.1 + Nhibernate 3.3.1.4 编写的应用程序进行故障排除,该应用程序的内存消耗达到 3 到 5 GB,高于预期。
在收集了一些内存转储后,很明显大对象堆上有碎片。
我的第一个想法是将应用程序更新到 .net 4.5.1 并告诉 GC 压缩 LOH,但我注意到固定对象数组的数量,这导致了一个演示应用程序可以得出堆的结论压缩在固定对象场景中没有帮助,甚至在没有固定对象时也没有必要,因为没有碎片。
所以我试图跟踪这个固定对象并到达question,据说静态成员负责这些固定对象并且句柄位于高频堆上。
我的问题是:
- 如何继续尝试解决碎片问题?
- 由于我从 WinDbg 知道的命令不起作用,我如何才能获得有关高频堆上的内容的更多信息?
以上来自windbg的一些印刷品:
【问题讨论】:
-
请不要以图片附件的形式提供文本信息。图像不可搜索、不可复制或易于理解。让人们更容易帮助你。您是否尝试将您的问题减少到minimal reproducible example?
-
stackoverflow.com/questions/24931271/… 你可能会从以前的线程中学习,但一般来说,如果你缺乏经验,这不是一件容易的事。通过support.microsoft.com 打开支持案例并与他们分享转储。
标签: .net large-object-heap heap-fragmentation