我使用Visual Studio .NET构建了一个应用程序,它运行正常。应用程序使用超过2-3小时后开始变慢,我不知道为什么。我使用GC.Collect();
来解决内存泄漏问题,但现在我有了新的问题。
有谁知道解决方案?
答案 0 :(得分:1)
如果您确实有内存泄漏,只需致电GC.Collect()
即可。 GarbageCollector只能收集那些不再被别人引用的对象。
如果您没有正确清理对象,GC将不会收集任何内容。
在处理内存消耗时,您应该强烈考虑以下模式:
弱事件(MSDN Documentation here)
如果您没有取消订阅活动,订阅对象将永远不会被释放到垃圾收集中。 GC.Collect()
将不删除这些对象,它们会使您的记忆混乱。
实施IDisposable
界面(MSDN documentation here)
(我强烈建议阅读这个文档,因为我已经看到很多错误的实现。)
您应该始终释放您使用的资源。在提供它的每个对象上调用Dispose()
!
这同样适用于流。请始终在提供此功能的每个对象上致电Close()
。
为了使点2和3更容易,您可以使用using
块。 (MSDN documentation here)
只要这些代码块超出范围,他们就会自动调用给定对象上的相应Dispose()
或Close()
方法。这与使用try... finally
组合时相同,但更方便。
答案 1 :(得分:0)
尝试使用内存探查器,例如ANTS Memory Profiler。首先,你需要了解发生了什么,然后你可以考虑如何解决它。
http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/