.net – VS2010调试/分析时的性能差异

[见编辑@底部 – 问题可能不是我最初的想法]

大家好,

我正在写一个图形库,它处理许多滤镜/效果,包括模糊.

我一直在努力优化我的代码并遇到了一些我不理解的东西……

当我在没有性能向导的情况下运行代码时,小图像上的简单3×3模糊可能需要几秒钟(远远超过应有的时间).如果我在此延迟期间中断执行,我得到:

No Source Available
System.dll!Microsoft.Win32.SystemEvents.WindowThreadProc() + 0xc2 bytes

运行/点击之间的地址是一致的

如果我通过性能向导运行代码,模糊效果会发生,没有明显的延迟.

我可以看到CPU占用50%(双核CPU,没有多线程ATM,因此最大化1核心)在模糊的持续时间,无论我用什么方法来启动我的应用程序.

如果我扩大模糊的复杂性以获得明显的延迟,我猜测附加分析器会将性能提高至少2个数量级.

我已经尝试从Debug转换为Release构建定义并获得相同的结果.

有人可以向我解释为什么我的代码会在附加分析器的情况下运行得更快吗?感觉我在某个地方犯了一个愚蠢的错误

编辑:

方案/速度:

>在Windows XP上:

>在VS中调试:慢
> VS中的分析:快速
> VS之外的调试/发布构建:快速

然后我切换到我的第二台机器并得到……

>在Windows 7上:

>在VS中调试:快速
> VS中的分析:快速
> VS之外的调试/发布构建:快速

这似乎表明我错误地发现了问题 – 这并不是说分析器正在改进,而是IDE中的调试正在扼杀它…我最初并不怀疑调试是问题,因为我开始开发没有问题的Win7机器然后切换到XP机器并假设速度变化是由于硬件差异.直到我开始剖析,我才看到它跑得多快……

最佳答案 这是一个总猜测,但是视觉工作室运行时具有管理权限,但你的程序不是?基本上,您在启动Visual Studio时是否获得了UAC升级对话框,因此如果在那里运行调试器/分析器,您可以最大化CPU,但可能不允许“用户空间”进程?一个相关的问题是询问在使用调试器(而非探查器)运行时是否获得性能“改进”.

完全猜测,但可能是一个开始寻找的地方.

点赞