我有一个运行在大量XPS文档(数千个)上的WinForms .Net应用程序,在此运行期间,每个文档的句柄数量(根据sysinternals进程监视器和任务管理器)将增加3-10。我非常怀疑这些是由MS .Net XPS框架库打开并未关闭的句柄,但我无法追踪它。如何找到我的.Net应用程序在Windows应用程序中泄漏的位置?
尽管单步执行代码,在同一次运行过程中,处理计数会在不同点增加。例如,一次循环和句柄计数将在一行上跳1,下次可能不跳,或者它可能跳2。所以我怀疑XPS com组件有句柄泄漏。
虽然内存使用情况良好,但如果我一直用尽这种手柄,那么我会崩溃的应用程序,也许桌面。
到目前为止,我已经尝试sysinternals进程资源管理器来查看句柄,但它们都被标记为没有更多的细节。还使用了sysinternals的handle.exe,这并不显示快照之前,之间和之后的任何显着不同。
任何关于如何追踪手柄的线索?我想我将不得不简化为单个线程控制台应用程序来测试。
问候
瑞安
是的,正如我所说的,内存使用现在可以了(在COM XPS调用中泄漏有很多问题),所以我认为这种配置不是问题。我非常怀疑XPS的东西,但我还不能证明它。 – 2008-10-23 21:03:27
Dispose并不真正处理内存 - 它更多的是释放非托管资源(句柄)。我不是说它*是*,但它值得检查。 – 2008-10-24 06:32:06
+1 - 使用FxCop帮助检测可能无法处理的地方。 – Joe 2008-10-24 06:48:54