我在MSVC 2005中分析调试构建c ++代码,与发布中的(1-2秒)相比,某些代码需要很长时间才能执行(30秒以上)。
我在编译器选项(/ D _SECURE_SCL = 0)中将_SECURE_SCL设置为0,并在源中验证其设置为零。
我已经从分析器(AMD CodeAnalyst)中复制了顶级消费者
尝试调试代码并且每次等待时间不得不等待30秒以上,有什么我在这里缺少的吗?
更新
围绕类方法包装#pragma optimize()
并没有做太多事情,但定义/D _HAS_ITERATOR_DEBUGGING=0
将其降低到释放速度,这些现在是我的顶级探查器命中(这似乎是函数的正常):
3个功能,60个指令,总计:2666个样本,81.78%的显示样本,2.76%的总会话样本
感谢您的快速回复!
答案 0 :(得分:4)
如果您关心调试性能,还应该禁用_HAS_ITERATOR_DEBUGGING
。启用迭代器调试后,会执行大量的簿记来帮助您检测代码中使用无效迭代器的错误,或者无法正确管理容器和迭代器生存期。
也就是说,经过检查的调试版本和优化版本构建之间的性能差异为30:1听起来非常典型和合理。
答案 1 :(得分:0)
在这里查看一些答案:How to make MSVC debug builds run faster。
除了@James提到的_HAS_ITERATOR_DEBUGGING = 0
之外,似乎还有一个巧妙的技巧,可以切换#pragma optimize("", off) / #pragma optimize("", on)
来禁用单个函数/代码块的优化等。如果你只想调试一个特定的一段代码,禁用该部分的优化可能比全局关闭优化要快得多。
希望这有帮助。