这是my previous question.的后续问题。
正如this answer to my previous question中所建议的那样,我使用ProcessExplorer来分析应用程序用来查找句柄泄漏的句柄列表。
泄漏的句柄是节类型的。
节句柄到底是什么,它在哪里使用,以及什么会导致节句柄泄漏?
我在代码中没有使用内存映射文件.
发布于 2011-10-21 08:28:34
引用在Windows 2000 (现在称为Windows内部)的话,
-- Win32子系统调用的节对象--文件映射对象,表示两个或多个进程可以共享的内存块。
所以,它是一个内存映射文件。如果您创建了一个内存映射文件,但未能关闭它,它们就会泄漏。很难说得更具体些。
发布于 2011-11-28 11:55:35
结果是,问题出在一个低级函数中,该函数计算当前进程的线程数。此函数使用
CreateToolhelp32Snapshot返回句柄的API函数,该句柄未正确关闭。不过,我不知道为什么会产生一个段句柄泄漏。
发布于 2011-10-21 14:53:59
与文件句柄无关的内存映射文件可用于IPC (进程之间的通信)。如果您不直接使用它们,可能您的一个单元或组件正在执行某些IPC通信。很可能您使用组件连接到另一个进程,而不按请求释放它。
首先要采取的行动是跟踪任何内存泄漏(使用FastMM4调试模式),您肯定会在代码中找到一些未释放的对象。
由于句柄通常由对象分配,根据我的实验,解决所有内存泄漏将解决句柄泄漏。
如果没有任何内存泄漏,那么在所有源代码(包括第三方源代码)中都会有一些CreateFileMapping()调用来检查相应的CloseHandle()。
https://stackoverflow.com/questions/7846526
复制相似问题