2

我一直在绞尽脑汁想弄清楚最新(非测试版)Visual Studio 2008 SP1 到底发生了什么:

我使用 OpenMP 构建的应用程序在调试器中运行速度非常慢,使 CPU 使用率达到 100%。当它们在调试器之外运行时,它只是运行缓慢(对于发布版本)。

我使用英特尔线程构建块库或我自己的线程团队实现构建的应用程序在调试器中的运行速度比在调试器外部运行时慢(对于发布版本)。

当我转到我的另一台没有安装 SP1 的开发机器时,情况就不同了。在调试器中或外部运行对程序性能没有影响。OpenMP 加速了我的应用程序,Thread Building Blocks 或我自己的线程团队代码(为了解决这个问题而仓促编写)。

这绝对没有对应用程序进行任何更改,只需在调试器 SP1 与常规 Visual Studio 的内部或外部运行它。

我在谷歌上没有找到任何关于这件事的信息,所以我伸出脖子说些什么,希望其他人可能会意识到这正在发生在他们身上。要么,要么我看到的东西。

4

1 回答 1

2

是的。在某些情况下。切换到 SP1 后,我们遇到了类似的极度减速的情况。造成这种情况的原因是异常。我们有一个数据模型,它大量使用了尝试访问字典中的键、使其失败并捕获异常的模式:

try {
  var a = dict[key];
} catch(KeyNotFoundException) {
  dict[key] = default;
  a = default;
}

这只是一个例子,但原因是任何异常。无论出于何种原因,仅在调试器中的 VS 非常慢。请注意,这是以前的情况,但新补丁的情况明显更糟。

解决方案是简单地始终使用测试。对于上面的字典示例,使用 .TryGet 或在自定义代码中检查您的调用是否会在调用之前生成异常,如果它会发生很多(因此是“预期”的事情而不是“异常”的事情) .

更多信息:异常和性能

于 2009-09-03T00:14:25.703 回答