【发布时间】:2011-05-07 00:07:22
【问题描述】:
[见编辑@底部-问题可能不是我最初想的]
大家好,
我正在编写一个图形库来处理包括模糊在内的许多滤镜/效果。
我一直在尝试优化我的代码,但遇到了一些我不理解的东西......
当我在没有性能向导的情况下运行代码时,在小图像上进行简单的 3x3 模糊可能需要几秒钟(比应有的时间长得多)。如果我在此延迟期间中断执行,我会得到:
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 运行应用程序时是否会出现同样的情况?是否仍然有相同的延迟。
-
@kyndigs - 好点 - 我已经编辑了 Q 以给出详细的答案
-
我认为你已经解决了你自己的问题。调试器会破坏性能。 IMO 可以,因为它不是用于性能测试。我真的很高兴你在那里的详细结果,因为它显示了探查器的“不错的命中”,这非常有用。
-
@Kevin - 同意你关于分析器的结论,但对调试器不是 100% 满意 - 为什么平台之间的性能差异?也许 Win7 有一些额外的功能来减少影响?我很想知道...
-
我确信 Windows 7 已经针对 .NET 框架进行了优化,如果它的 Visual Studio 2010 也针对 Windows 7 而不是 XP 进行了优化。
标签: .net performance visual-studio-2010 optimization