如何找到导致内存泄漏且未被应用程序直接引用的dll

How to find the dll which causes a memory leak and not directly referenced by application

我正在编写一个使用大量非托管 DLL 的 WPF 应用程序。程序中的某些内容导致内存泄漏,我使用 Redgate ANTS 8 Memory Profiler 监视了应用程序。 ANTS显示MSVCR110.dll的内存占用在不断增加

问题是托管代码可以通过使用 MSVCR110.dll 导致此泄漏吗?

如果不是,我能找到哪个非托管 dll 正在使用 MSVCR110.dll 并导致泄漏吗?

(我的程序直接引用了MSVCR110.dll。)

拍摄一些快照并查看任何托管对象是否有任何增长。您可以 select 带有 ANTS 内存分析器中源选项的对象,如果实例计数,它会为您的任何对象增长。然后,您可以查看任何增长实例的“实例保留图”,看看哪个保留了引用。

此外,请确保您取消订阅对第三方组件的任何订阅,并适当地调用处置和设置空指针。

答案并不容易找到。我已经一个一个地尝试了我怀疑的每个 DLL。泄漏是 C++/CLI 包装器 class 中未删除的数组。由于它是一个托管 dll,我认为,本机 "new" 调用是通过 msvcr110.dll 跟踪的,而 ANTS 显示该 dll 中存在泄漏。