我在我的代码中使用 std::map ,但在调试版本中使用它的代码运行速度比发布版本慢得令人无法接受。这个答案说这是因为
在 Microsoft Visual Studio 中,访问标准 C++ 库时有一个全局锁,以防止在调试版本中出现多线程问题。
但它没有详细说明禁用该全局互斥锁的方法。有什么办法吗?
我在我的代码中使用 std::map ,但在调试版本中使用它的代码运行速度比发布版本慢得令人无法接受。这个答案说这是因为
在 Microsoft Visual Studio 中,访问标准 C++ 库时有一个全局锁,以防止在调试版本中出现多线程问题。
但它没有详细说明禁用该全局互斥锁的方法。有什么办法吗?
如果您的问题通常是使用 STL 的调试构建速度很慢,我会尝试关闭迭代器调试。据我所知,这是发布和调试版本之间的重大放缓之一。我认为相关#define
的是:
#define _HAS_ITERATOR_DEBUGGING 0
据我所知,这并不是因为运行时库中的某些调试检查可能(并且很可能无法进行)线程安全,因此为了给您额外的检查,您必须拥有全局锁。
根据经验,我知道调试运行时要慢得多,但在很多情况下,额外的运行时检查很有价值。在指责运行时之前,我还会在代码中指出一个分析器 - 您的调试代码运行时未优化,除非您调整了标志,因此代码中的任何性能问题都会被放大,因为编译器按照您的要求执行:) .
也就是说,如果您愿意放弃额外的运行时检查,您可以用来解决此问题的一个选项是尝试针对发布运行时构建您的调试版本。我已经有一段时间没有尝试过了,但我最后一次尝试这样做确实有效,它可能会使一段慢得令人无法接受的代码变得更容易忍受。