在我的一个应用程序中,我观察到越来越多的句柄。在不使用应用程序的情况下,该数字大约每秒递增一次,因此在后台处理代码的某些部分中肯定存在句柄泄漏。
如何追踪此类泄漏?有什么工具可以帮助解决这个问题吗?跟踪句柄泄漏时要寻找哪些模式?导致句柄泄漏的最常见错误是什么?
一堆问题,但我希望它们足够相关,可以将它们放在一个问题中。感谢您提前输入!
在我的一个应用程序中,我观察到越来越多的句柄。在不使用应用程序的情况下,该数字大约每秒递增一次,因此在后台处理代码的某些部分中肯定存在句柄泄漏。
如何追踪此类泄漏?有什么工具可以帮助解决这个问题吗?跟踪句柄泄漏时要寻找哪些模式?导致句柄泄漏的最常见错误是什么?
一堆问题,但我希望它们足够相关,可以将它们放在一个问题中。感谢您提前输入!
我建议使用Process Explorer。以管理员身份运行它以确保您看到所有相关数据。在那里,您可以观察您的进程有哪些类型的句柄,以及哪些句柄被过度创建而未被释放。这应该可以帮助您缩小搜索范围(在我的情况下,由于对 winsocks 行为的一些错误假设,我的套接字到处泄漏。)。或许那你可以把相关代码隔离出来,贴在这里让我们检查一下有没有问题。祝你好运!
一些分析器(即AQTime)可以分析 Windows 资源应用程序。如果您使用的是 XE,则可以使用 AQTime 的基本版本。
如果执行路径没有正确关闭它们,句柄泄漏很常见 - 但在 Windows 中,句柄是在许多不同情况下使用的非常常见的项目,您的应用程序泄漏了哪种句柄?
在win10中,在https://docs.microsoft.com/en-us/sysinternals/downloads/handle下载工具“Handle” ,
用法:
处理 [[-a] [-u] | [-c [-l] [-y]] | [-s]] [-p |> [名称]
例子:
在进程 33920 中显示所有类型的句柄及其计数:在 cmd 中,运行“handle64 -s -p 33920”
结果如下所示: