我正在使用Microsoft.Practices.Unity框架1.2,我可以看到内存使用量随着时间的推移而急剧增加。我一直在观察Gen 0,1和2的垃圾收集器堆大小,而对象似乎会不断升级到Gen 2,它们会保留并且在没有GC声明的情况下变老。
我是否可以做一些调整来避免过多的内存消耗?
答案 0 :(得分:1)
你怎么知道这是由于统一框架?注入的实例可能没有正确处理。我建议使用RedGate Memory Profiler,因为它会准确地告诉你什么是未收集的。内存泄漏是PITA,过去两周我一直在处理它们。
事件处理程序通常是导致这些类型问题的原因。确保手动删除所有事件处理程序。
我发现GC在清理方面并不像你想象的那么好。
答案 1 :(得分:0)
如果对象正在迁移到第2代,那意味着它们仍然存在。确保您的类实现IDisposable
,并且他们在包含的任何引用上调用Dispose()
。自动执行此操作的一种方法(如果您使用的是C#)是将引用包装在using
块中。引用将自动在块的末尾处理。