我有一个WinForms .Net应用程序,它运行了大量的XPS文档(数千个),在这个过程中,每个文档的句柄数量(根据sysinternals,进程监视器和任务管理器)增加了3-10个。我非常怀疑这些句柄是由MS .Net XPS框架库打开的,而不是关闭的,但我无法追踪到它。
尽管单步执行代码,句柄计数在同一运行期间的不同点都会增加。例如,一次通过循环,句柄计数将在一行上跳1,下一次可能不会,或者可能跳2。因此,我怀疑XPS com组件存在句柄泄漏。
内存使用是很好的,但是如果我一直像这样耗尽句柄,那么我会使应用程序崩溃,可能还会导致桌面崩溃。
到目前为止,我已经尝试过sysinternals process explorer来查看句柄,但它们都被标记为没有更多细节。我还使用了sysinternals中的handle.exe,这在快照之前、期间和之后没有显示任何显著的差异。
有没有关于如何追踪手柄去向的线索?我想我将不得不简化为一个单线程控制台应用程序来进行测试。
问候
瑞安
发布于 2008-10-23 20:54:50
可能很愚蠢,但你有没有检查过你正在处理所有一次性的东西?
发布于 2008-10-23 20:57:14
虽然单独使用它有点贵,但我们使用ANTS Profiler,它在查找这样的问题时非常有帮助。您可以下载并试用试用版。
可能还有其他优秀的分析器,但这是我所熟悉的。
发布于 2009-03-30 21:31:18
那么,您是否忘记删除从PackageStore中创建的XPS文档?那么用来支持你的包的任何MemoryStreams呢?
https://stackoverflow.com/questions/231480
复制相似问题