这是对我以前的问题的后续问题。
正如我在上一个问题的答案中所build议的那样 ,我使用了ProcessExplorer来分析我的应用程序用于查找句柄泄漏的句柄列表。
泄漏的句柄是Sectiontypes的。
什么是一个部分句柄,它在哪里使用,并可能导致部分句柄泄漏?
我如何编程列出Windows中的所有全局突变体?
由激活上下文引起的dynamic加载的DLL上的文件句柄泄漏
Nodejs读取某个进程的stdout并执行一些操作
我可以在TransactionScope块中使用sqlConnection.BeginTransaction
通过Thread.list.size得到的线程号与通过/ proc的线程号不一样
释放信号处理程序中的内存
C ++ | Windows – 有没有办法找出哪个进程拥有locking文件的所有权?
为什么Java CRLF标记不能用于batch fileinput?
使用MiniDump获取句柄数据(DbgHelp.h)
boost ::线程导致小事件处理泄漏?
引用Mark Russinovich的Inside Windows 2000(现在叫做Windows Internals),
Win32子系统调用文件映射对象的section对象代表两个或多个进程可以共享的内存块。
所以,这是一个内存映射文件。 如果您创建了内存映射文件,并且未能关闭它,它们会泄漏。 很难得到更具体的。
事实证明,问题是在一个低级函数中,它计算当前进程的线程数量。 这个函数使用了
Createtoolhelp32Snapshot
返回句柄的API函数,该句柄没有正确关闭。 我不知道为什么这会产生一个节处理泄漏。
IPC(进程之间的通信)可以使用与文件句柄无关的内存映射文件。 如果你不直接使用它们,也许你的一个单元或组件正在进行IPC通信。 您很可能使用组件连接到另一个进程,并且不要按要求释放它。
首先要采取的行动是跟踪任何内存泄漏 (使用FastMM4调试模式),你一定会发现你的代码中有一些未发布的对象。
由于句柄通常由对象分配,所以在我的实验中,解决所有的内存泄漏将解决句柄泄漏问题。
如果您没有任何内存泄漏,则会有一些CreateFileMapping()调用在您的所有源代码(包括第三方源代码CloseHandle()中检查相应的CloseHandle() )。
.net中的部分句柄泄漏是由于Microsoft修补程序KB2670838。 卸载此更新和部分处理泄漏问题(内存不足)将被修复。
Parameter is not valid. at System.Drawing.Image.get_Width() at System.Drawing.Image.get_Size()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。