处理Win7应用程序中的限制 我在Windows 7中有一个C++多线程应用程序。此应用程序被编译为DLL,供其他C#应用程序使用

处理Win7应用程序中的限制 我在Windows 7中有一个C++多线程应用程序。此应用程序被编译为DLL,供其他C#应用程序使用,c++,windows,multithreading,handles,C++,Windows,Multithreading,Handles,我长时间运行多线程代码来处理流数据。如果我把这个C++代码编译成一个独立的.exe,并运行代码,它就可以工作。 但是当它被转换成DLL并且C#代码与之一起运行时,程序在长时间运行后会因访问冲突错误而崩溃。 当我从Python脚本加载DLL并长时间运行它时,我看到类似的崩溃 当我使用任务管理器观察行为时,我看到系统句柄数以非常快的速度增加。在大约2个小时的代码运行后,我看到句柄数超过300000个大关,并且一直在增加 在多线程代码中,线程不断地被创建和分解。我看到线程退出后,CloseHandle

我长时间运行多线程代码来处理流数据。如果我把这个C++代码编译成一个独立的.exe,并运行代码,它就可以工作。 但是当它被转换成DLL并且C#代码与之一起运行时,程序在长时间运行后会因访问冲突错误而崩溃。 当我从Python脚本加载DLL并长时间运行它时,我看到类似的崩溃

当我使用任务管理器观察行为时,我看到系统句柄数以非常快的速度增加。在大约2个小时的代码运行后,我看到句柄数超过300000个大关,并且一直在增加

在多线程代码中,线程不断地被创建和分解。我看到线程退出后,CloseHandle函数不会显式关闭线程句柄。这可能是一个潜在的问题吗

我如何确认这是一个处理问题。有哪些方法可以更好地查看这些系统资源? 在尝试任何修复之前,我想知道所有可能的解决方案,因为测试运行需要很长时间(超过5个小时)来重现崩溃。

SysInternals可以查看进程中的句柄,并将它们标识为线程、互斥体、文件等句柄。您必须关闭每个线程句柄来清理它们


另外,创建线程是一项昂贵的操作。如果要创建大量线程作业,最好将作业排队并创建一个有限数量的线程池(通常大约等于系统中的CPU数量)从队列中拉出并执行作业。

根据:线程对象保留在系统中,直到线程终止,并且通过调用CloseHandle关闭所有句柄。由于您正在询问有关工具的建议,因此您的问题可能会被关闭。您可能希望对其进行编辑以重新关注原因,而不是使用工具来查找原因。同时,句柄泄漏肯定会造成问题,因为Windows在进程结束时释放资源,而不是在卸载DLL时。如果句柄在某个时间点没有关闭,无论是在创建线程之后还是在关闭时,那么这肯定是一个bug,肯定可以解释您的症状。如果我是你,我会先修复这个bug,如果症状持续,我只担心进一步的故障排除。