我有一些C#代码。我使用代码分析来查找我没有使用using(){}
或不调用dispose的所有地方。这样就完成了。但它仍然泄漏。除了两个函数(SetWindowPos,SetForegroundWindow)之外,代码不会调用DllImport,但是从不调用它们(主实例不会使用它。其他实例会这样做,但它们会活几秒钟。)
不知何故,这段代码正在泄露。我如何找出问题所在?
答案 0 :(得分:6)
托管代码中的内存泄漏通常是由于对象被非预期的引用保存在内存中。事件掠夺者是这里常见的罪魁祸首。
您将需要获取内存分析工具。 SciTech's .NET Memory Profiler可能是最好的,但JetBrains' dotTrace和RedGate's ANTS也都很好。
Microsoft有一个可以使用的免费分析工具CLR Profiler,虽然它有点复杂。有关一些指导,请参阅here和here。
DRONE profiler for .NET似乎有免费的个人许可,但我自己并不熟悉这个工具。他们有一篇关于使用他们的探查器here查找内存泄漏的文章。
Visual Studio的高端版本还包含分析工具。 MSDN包含documentation on how to use them。
答案 1 :(得分:1)
使用Visual Studio内置的探查器(Premium和Ultimate)配置您的应用程序,或投资使用ANTS之类的工具。