我的应用程序使用5 GB到6 GB的内存。我们运行了IIS调试诊断程序,它显示以下内容:
GdiPlus.dll负责2.49 GBytes的未完成分配。以下是前2个内存消耗函数:
GdiPlus!GpMemoryBitmap :: AllocBitmapData + c2:2.47 GBytes的未完成分配。 GdiPlus!EpScanBitmap ::开始+ 212:6.79 MBytes的未完成分配。
在w3wp.exe_ 项目名称-2中检测到 _PID_ 28824 _Date__03_10_2012__Time_03_15_14PM_ 457 _Leak Dump - Private Bytes.dmp
导致这种泄漏的原因是什么?这是因为刷子。
请提出一些想法/或如何解决这个问题?
提前致谢。
答案 0 :(得分:3)
您可能忘记发布GDI句柄(位图,画笔,笔等)。大多数GDI对象实现IDisposable
,并且在使用完这些对象后应始终调用Dispose
方法。 using
语句可以帮助解决这个问题:
using (Brush b = new SolidBrush(Color.Black))
{
...
} // b.Dispose is called automatically here
答案 1 :(得分:0)
我会说(根据你提供的alocator信息)你没有杀死你的位图。每个GDI +对象都是IDisposable
,因此Dispose()
或使用using
关键字建议。