我有一个用于 Windows 7 的 C++ 中的多线程应用程序。这个应用程序被编译为 DLL 以供另一个 C# 应用程序使用。
我长时间运行多线程代码来处理流数据。如果我将此 C++ 代码编译成独立的 .exe,并运行该代码,它就可以正常工作。
但是当它变成一个 DLL 并且当 C# 代码与它一起运行时,程序在长时间运行后崩溃并出现访问冲突错误。当我从 Python 脚本加载 DLL 并长时间运行它时,我看到了类似的崩溃。
当我使用任务管理器观察行为时,我看到系统句柄计数以非常快的速度增加。经过大约 2 小时的代码运行后,我看到句柄计数超过 300,000 个标记,并且还在不断增加。
在多线程代码中,线程被不断地创建和拆除。我看到线程退出后,线程句柄没有被 CloseHandle 函数显式关闭。这可能是一个潜在的问题吗?
我如何确认这是一个句柄问题。有哪些方法可以更好地观察这些系统资源?在我尝试任何修复之前,我想知道所有可能的解决方案,因为测试运行需要很长时间,超过 5 个小时,才能重现崩溃。