我有一个带有内存泄漏的大型.NET C#应用程序。使用annt内存分析器,我可以看到内存中有多个版本的相同用户控件,垃圾收集器没有收集它们。 Web表单上有输出缓存,但实际用户控件上没有输出缓存。
是否存在未处理用户控件的原因?
我如何确定为什么以及什么阻止他们被垃圾收集器处理?
答案 0 :(得分:1)
有很多原因导致用户控件没有被垃圾回收。看看代码本身,你是否实例化了实际上没有处理过IDisposable的对象(例如记录集)?
答案 1 :(得分:0)
如果您的网页上启用了输出缓存,则所有子控件也会缓存。至于你的控件的多个实例在内存中挥之不去,请使用部分页面缓存为这个页面读取一些策略,这将有助于节省内存。
http://msdn.microsoft.com/en-us/library/k4he1ds5(VS.71).aspx
答案 2 :(得分:0)
如果有人至少拥有一个对象,则基本上不会收集对象。查看并查找谁持有该参考。 ANTS Profiler或.NET Memory Profiler(SciTech)将提供良好的洞察力。