4

我有一个 WinForms .Net 应用程序,它可以运行大量 XPS 文档(数千个),在此运行期间,每个文档的句柄数量(根据 sysinternals 进程监视器和任务管理器)增加了 3-10 个。我严重怀疑这些是由 MS .Net XPS 框架库打开而不是关闭的句柄,但我无法追踪它。

尽管单步执行代码,但在同一运行期间,句柄计数在不同点会增加。例如,一次通过循环,句柄计数将在一行上跳 1,下一次可能不会跳,或者它可能跳 2。所以我怀疑 XPS com 组件有句柄泄漏。

虽然内存使用很好,但如果我一直像这样耗尽句柄,那么我会崩溃应用程序,也许是桌面。

到目前为止,我已经尝试过 sysinternals 进程资源管理器来查看句柄,但它们都被标记为没有更多细节。还使用了来自 sysinternals 的 handle.exe,这并没有显示快照之前、期间和之后的任何显着差异。

关于如何追踪把手的去向的任何线索?我想我将不得不简化为一个单线程控制台应用程序来测试。

问候

瑞安

4

4 回答 4

1

可能很愚蠢,但你有没有检查过你正在处理所有一次性的东西?

于 2008-10-23T20:54:50.253 回答
1

虽然单独使用有点贵,但我们使用ANTS Profiler,它对于发现此类问题非常有帮助。您可以下载并试用试用版。

那里可能还有其他好的分析器,但这是我熟悉的。

于 2008-10-23T20:57:13.790 回答
0

我在使用YourKit .net profiler准确诊断这种故障方面有很好的经验。强烈推荐 - 它相对便宜,甚至可以很好地处理 C++-CLI(我已经尝试过其他方法,例如来自 jetbrains 的 dottrace,它们要么拒绝,要么直接崩溃)。

于 2012-06-18T11:53:26.997 回答
0

那么,您是否忘记从 PackageStore 中删除您创建的 XPS 文档?那么用于支持您的包的任何 MemoryStreams 呢?

于 2009-03-30T21:31:17.717 回答