在Win 7应用程序中处理限制
Handle limits in Win 7 application
我在Windows 7的C++中有一个多线程应用程序。此应用程序被编译为DLL,以供其他C#应用程序使用。
我长时间运行多线程代码来处理流数据。如果我将这个C++代码编译成一个独立的.exe,并运行代码,它就可以正常工作。
但是,当它被转换为DLL时,当C#代码与它一起运行时,该程序在长时间运行后会因访问违规错误而崩溃。当我从Python脚本加载DLL并长时间运行它时,我看到了类似的崩溃。
当我使用任务管理器观察行为时,我看到系统句柄计数以非常快的速度增加。在运行了大约2个小时的代码后,我看到句柄数突破了300000大关,并且不断增加。
在多线程代码中,线程不断地被创建和拆除。我看到线程退出后,CloseHandle函数并没有显式关闭线程句柄。这可能是一个潜在的问题吗?
我如何确认这是一个句柄问题。有什么方法可以更好地监视这些系统资源?在我尝试任何修复之前,我想知道所有可能的解决方案,因为测试运行需要很长时间,超过5个小时,才能重现崩溃。
SysInternal Process Explorer可以查看进程中的句柄,并将其标识为线程、互斥对象、文件等句柄。你肯定需要CloseHandle()每个线程句柄来清理它们。
顺便说一句,创建线程是一项昂贵的操作。如果您正在创建大量线程作业,最好将作业排队,并创建一个由有限数量的线程(通常约等于系统中CPU的数量)组成的池,这些线程从队列中提取并执行作业。
相关文章:
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 有关图像处理应用程序的硬件和软件安全性的建议
- 通过安装信号处理程序关闭多线程应用程序
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- C++ 应用程序中的 C ISR 处理程序
- 如何处理Qt托盘应用程序中的会话更改通知
- 多线程应用程序中的零MQ处理中断
- C#/C++:启动应用程序并处理其对系统的I/O调用
- 在控制台应用程序中处理空的windows消息队列
- 处理Windows消息,以便我的应用程序正确响应
- 在Direct2D应用程序中处理HRESULT
- 在基于Visual Studio MFC的应用程序中禁用活动处理程序
- 处理运行的Windows控制台应用程序中的拖放文件
- 文本框为空时,C++Windows窗体应用程序出现未处理的异常错误
- iOS + C++ 中的图像处理在 iphone 应用程序中
- 文本框为空时C++ Windows 窗体应用程序未处理的异常错误
- 处理应用程序中的访问冲突
- VC++异常处理-应用程序无论如何都会崩溃
- 文字处理应用程序