【发布时间】:2011-04-03 00:56:41
【问题描述】:
大家好,
我是一个相当大的 C# Windows Explorer 扩展的开发者。可以想象,涉及到很多 P/Invoke,不幸的是,我已经确认它在某处泄漏了非托管内存。但是,我对如何找到泄漏点一无所知。我尝试关注this helpful guide,它说要使用WinDBG。但是,当我尝试使用 !heap 时,它不会让我这样做,因为我没有 explorer.exe 的 .PDB 文件(显然,公共符号文件还不够)。
帮助?
【问题讨论】:
-
您不应该使用 C# 编写 shell 扩展。有关说明,请参阅blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx。
-
感谢您的回复。但是,您引用的链接已过时。 C# 中的 Shell 扩展曾经不是一个好主意,因为它们可能导致 CLR 被注入到任何包含 shell 对话框的随机进程中。如果该进程加载了不同版本的 CLR,则两者会发生冲突。但是,.NET 4 现在支持多个 CLR 版本的内存中并行操作,这意味着不再有任何问题。此外,我的扩展是一个工具栏,它只加载在资源管理器中,而不是任何其他进程。
标签: memory-leaks windbg windows-explorer