程序执行速度测试

时间:2009-10-15 11:08:19

标签: c# .net performance optimization profiling

我有一个C#应用程序,我正在测试3种方法来处理XML。

我读取了一串XML获取值,然后将其添加到自定义集合中。

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

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

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

我已经下载了EQATEC探查器,但我对它的使用感到很遗憾。

有人可以告诉我确定哪种方法运行最快的最佳方法。

由于

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用StopWatch测量时间时,每个方法是否足以使用一组样本输入?

答案 2 :(得分:1)

Jon Skeet编写了一个非常好的bechmarking'框架'来衡量这样的简单操作,我认为这非常适合检查这些方法,你可以在这里找到:http://www.yoda.arachsys.com/csharp/benchmark.html(注意,这个只是计算操作的时间,而不是分析堆使用或类似的东西。)

要记住的重点(Jon在上面的网站上注意到它,并且Eric Lippert喜欢在主题出现时提及它)是当你多次运行代码时,它只会被JIT给第一个时间,所以如果你想测量每种方法的真实差异,至少测量两次并比较第二次运行 - 我想这是你的订单转换的结果。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

学习使用您拥有的工具:

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

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

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

答案 5 :(得分:0)

您可以使用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);