程序执行速度测试

Posted

技术标签:

【中文标题】程序执行速度测试【英文标题】:Program Execution Speed Testing 【发布时间】:2009-10-15 11:08:19 【问题描述】:

我有一个 C# 应用程序,我在其中测试 3 种使用 XML 做某事的方法。

我读取一个 XML 字符串,取出一个值,然后将其添加到自定义集合中。

我正在测试 XMLDocument、XDocument 和 String 操作以查找节点值,按此顺序记录每个节点的开始和结束时间。

但是,如果我说混合顺序,我会报告不同的速度。此外,当我再次按下按钮以再次执行测试时,最初最慢的那个有时在后续测试中花费最少。

我确信这一切都与 JIT 和垃圾收集有关,但确定什么运行速度最快的最真实方法是什么。

我已经下载了 EQATEC 分析器,但我不知道如何处理它。

谁能告诉我确定哪种方法运行最快的最佳方法。

谢谢

【问题讨论】:

【参考方案1】:

另一个值得尝试的分析器是Slimtune。

【讨论】:

【参考方案2】:

在用StopWatch测量时间的同时,每个方法都有一组样本输入还不够吗?

【讨论】:

这基本上就是我所做的,但是如果我围绕 ie/TestString、TestXdoc、TestXML 更改处理执行,如果我运行 TestXML、TestXDoc、TestString 所花费的时间是不同的,为什么会这样? 你放弃了第一个结果吗? 我猜第一种方法中最慢?您可能应该运行单独的测试,例如带有示例文件的 1000 次 TestXML,然后计算平均值。使用 TestXDoc 重复,然后使用 TestString 并比较结果。【参考方案3】:

Jon Skeet 编写了一个非常好的基准测试“框架”,用于测量像这样的简单操作,我认为它非常适合检查每种方法,您可以在这里找到:http://www.yoda.arachsys.com/csharp/benchmark.html(注意,这只是定时操作,而不是分析堆使用情况或类似的东西)。

要记住的重要一点(Jon 在上面的那个网站上指出,Eric Lippert 喜欢在话题出现时提及它)是,当您多次运行代码时,它只会首先获得 JIT时间,因此,如果您想测量每种方法的真正差异,请至少测量两次并比较第二次运行 - 我想这是您转移订单的结果。

【讨论】:

【参考方案4】:

尝试使用分析工具,例如 Red-Gate 的 ANTS 或 JetBrains 的 dotTrace。分析器将向您显示每种方法所花费的时间百分比,以便您确定哪个是执行速度更快的方法。

【讨论】:

恐怕它必须是免费的。 您可以一直使用试用版吗?【参考方案5】:

学习使用你拥有的工具:

http://www.eqatec.com/tools/profiler/guide

如果你得到不一致的结果,做科学的事情并做控制案例:

在一个循环中多次测试,以便在其余运行中平均第一个案例 或者只测试第一种情况(每次都重新启动应用程序)。

【讨论】:

【参考方案6】:

您可以使用 Michael McMillian 的“使用 c# 的数据结构和算法”中的 Timing 类。

大致如下:

TimeSpan startingTime, duration;
GC.Collect();
GC.WaitForPendingFinalizers();
startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
DoLengthyWork();
duration = Process.GetCurrentProcess.Threads(0).UserProcessorTime.Subtract(startingTime);

【讨论】:

以上是关于程序执行速度测试的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 Grails 构建和测试执行速度?

如何加快 PHPUnit + DBUnit 测试套件的执行速度?

虹软人脸识别速度测试征集

六大自动化测试技巧——提高速度就靠他们了!

AI Studio 不同环境下的执行速度

WebDriver元素等待机制