记一次 .NET某家装ERP 内存暴涨分析
💡
原文中文,约9200字,阅读约需22分钟。
📝
内容提要
微信上一位老朋友找到作者,程序运行时内存突然爆高,分析发现是由于LOH默认不启用压缩回收,使用BinaryFormatter序列化,RowCount为1.7W,解决方案有:强制LOH压缩,分批次获取。
🎯
关键要点
- 一位老朋友在微信上求助,程序内存突然暴高,怀疑内存泄露。
- 使用 WinDbg 分析,确认是托管内存问题,托管堆占用 12G 内存。
- 通过 !dumpheap -stat 发现 System.Byte[] 数组占用大量内存,特别是大数组。
- GC 默认不启用 LOH 压缩回收,导致内存使用不当,出现内存暴涨现象。
- 通过分析,发现是序列化一个巨大的 DataTable 导致内存暴涨。
- 解决方案包括强制 LOH 压缩和分批次获取数据。
➡️