Windows 7系统上测量性能的巨大差异

时间:2016-10-10 16:04:12

标签: c performance windows-7

我正在尝试对Windows控制台模式应用程序(在VS 2012 Express下用C语言编写)进行一些性能增强,寻找大约20%左右来赢得竞争基准。我被软件测量性能的巨大变化所打败,重复完全相同的测试可以产生相差100%最佳时间的结果(我已经看到更多)。

该测试在四核2.7GHz处理器上的Windows 7 Pro下运行。没有其他进程正在消耗任何重要的系统功能。

该程序主要关注字符串操作。除了报告结果之外没有i / o,但是大量使用malloc()和free()。该程序有第二个线程,在整个测试过程中将处于空闲状态。

我通过使用GetProcessTimes()函数来测量性能,以便在大约5秒的测试中记录处理器时间。测量经过的时间会产生相同的行为。同样清楚的是,这是真正的性能差异,而不是测量技术的不准确性。

有趣的是,从同一个命令提示符窗口多次运行程序会产生一个相当接近(但仍然无法解释)的性能变化。打开新的命令提示符窗口有时会产生明显不同的性能,但在命令提示符窗口的同一实例中重复测试会产生相当一致的结果。

这很疯狂。为什么父进程会对子进程的性能产生影响?

我知道系统会根据系统负载自动调整处理器速度。我能做的最好是在相同的条件下重复测试,希望处理器每次都能以大致相同的速度运行。我尝试在程序的定时部分之前插入一个冗长的CP密集循环,以便处理器能够以适当的速度稳定下来。正如预期的那样,任务管理器显示我的进程消耗了25%的可用处理器能力。

我还阅读了有关性能变化的相关问题,但它们似乎都没有解释我所看到的内容。

在尝试跟踪此问题时,我注意到该过程正在产生大量软页面错误。 Windows任务管理器显示的页面错误增量通常超过400,000。我读过无数关于页面错误的文章,其中大多数都说可以忽略软页面错误,但这个值似乎足够高,肯定会对性能产生影响。当性能处于最佳状态时,页面错误增量要低得多,支持这种观点。

所以,我的问题是:(1)为什么我看到完全相同的程序的性能有很大差异?(2)是否有一些监控工具可以解释非常高的软页面错误?

所有的想法都非常感激。感谢。

0 个答案:

没有答案