我在Windows 7中有一个多线程应用程序。此应用程序被编译为DLL以用于使用另一个C#应用程序。

我运行多线程代码长时间处理流数据。如果我将此C ++代码编译为独立的.exe,并运行代码,它可以正常工作。

但是当它变成一个dll时,当c#代码运行时,程序崩溃了长跑后的访问冲突错误。 当我从Python脚本加载DLL时,我看到类似的崩溃,并在长时间运行它。

当我使用任务管理器观看行为时,我看到系统句柄计数以非常快速的节奏增加。在2小时的代码运行后,我看到句柄计数交叉300,000标记,它不断增加。

在多线程代码内,正在创建线程并连续撕开。我看到在退出线程后,线程句柄不会通过CloseHandle函数明确关闭。这可能是一个潜在的问题吗?

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

有帮助吗?

解决方案

sysinternals process explorer 可以在进程中查看手柄并识别他们是线程,互斥,文件等。你肯定必须关闭handle()每个线程手柄来清理它们。

除,创建线程是昂贵的操作。如果您正在创建大量线程作业,最好队列作业并创建有限数量的线程(通常等于系统中的CPU数量),从队列中拉动并执行作业。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top