使用Visual调试器释放内存非常慢

时间:2014-07-22 20:19:19

标签: c++ qt debugging memory-management visual-studio-2013

在我们的应用程序中,我们使用的是一个使用大量Qt容器的类。如果在将Visual Studio调试器附加到进程时销毁该类的对象,则释放内存极其缓慢(多分钟)。它仍然很好但很慢。

前段时间我已经确认调试器的内存检查对此是可靠的。这是一个众所周知的问题。

我解决了这个问题,只需通过调试器停止应用程序,如果它停留在释放内存中或者在没有连接调试器的情况下启动它。

但是现在我需要调试定期释放这些对象的代码。当然它可以工作但是速度慢得令人无法接受,因为我需要做很多周期,所以我需要一个更好的解决方案。

有没有办法在VS2013调试器中禁用堆内存检查?或者有没有办法从这些检查中排除一些变量?

2 个答案:

答案 0 :(得分:2)

_CrtSetDbgFlag控制调试堆的检查类型。

您的代码(或者您正在使用的库)可能会提高检查级别。例如,您可以在每次分配和释放时检查堆的完整性。这可能会导致巨大的放缓。不要使用_CRTDBG_CHECK_ALWAYS_DF,除非您确实需要它来查找特定的内存问题。

对于基本的泄漏检查,通常不会造成巨大的性能损失,您只需要(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF)

答案 1 :(得分:2)

我尝试了另一种解决方案。将环境变量_NO_DEBUG_HEAP设置为1实际上解决了我的问题。

这可以在系统级别(使用通用环境变量编辑器,例如REE)或在应用程序级别上通过将Visual Studio项目属性Debugging / Environment设置为“_NO_DEBUG_HEAP = 1”来完成。

我在回答我的问题时发现这些信息,不幸的是不再可见(我想它已被版主删除)。它包含this链接,实际上非常有帮助。