衡量功能,类和流程速度的最佳方法

时间:2011-02-03 09:12:36

标签: .net sql testing performance measure

衡量函数和类速度的最佳方法是什么?对于每个功能都有各种解决方案,我想知道如何测量运行速度并使用最佳解决方案优化我的共享类。

另外,您如何衡量SQL速度,例如存储过程,选择,视图等之间的差异?

3 个答案:

答案 0 :(得分:4)

您有两种选择。

使用System.Diagnostics.Stopwatch了解具体方法。

这是.NET中的高分辨率计时器,您可以将其用于代码的特定部分。

如果您需要衡量整个应用的效果,请使用分析器。

您可以使用Ultra Edition of Visual Studio中的build in profiler,或EQATEC之类的工具。

答案 1 :(得分:1)

您最好使用分析器。测量挂钟执行时间(例如由Stopwatch类完成)的问题在于它受到许多因素的影响,远远超出您的控制范围。仅举几个这样的因素,就会出现网络和其他I / O延迟,以及影响应用程序和线程相对优先级的操作系统调度程序决策。如果您在虚拟化环境中运行,那么对毫秒范围的挂钟时间测量也会产生相对较大的影响。分析器不是完美的,但它可以让您更好地了解实际执行代码所花费的时间。

除此之外,一个好的分析器通常也可以为您提供其他有用的指标,例如代码在执行期间使用的内存量。

答案 2 :(得分:0)

最好不要混淆测量和优化的目标。他们是不同的任务。测量,虽然有助于量化修复某些东西的结果,但却很难告诉你应该修复什么。

关于测量的主题,如果我想要介绍一下有多快,我想要一个受控的环境和一个好的秒表。然而,为了优化,原始测量(如运行1000次)和使用简单的计时器,已经足够好了。

关于优化的问题,我并不关心速度。 我担心不必要的活动。 没有必要高速运行代码来找到它。

当任何程序运行时,它会追踪一个调用树。 优化包括尽可能多地删除叶子(指令)和尽可能多的水果(I / O)。 这样做的一个好方法是修剪整个分支。

  • 除了最小的程序之外,优化的典型机会包括调用点(调用函数的代码行,而不是函数本身),当一个人意识到调用树从它们中萌发了多少时,就可以真正实现做另一种方式。一条看似无辜的代码可以负责整个树的很大一部分,你可以简单地把它砍掉。

为了找到这些,我认为挂钟时间栈采样是最好的方法。这不是一个有效的过程,并且相当少量的样本与大量样本一样好(或更好)。 有必要重复这样做,因为任何给定的程序,如最初编写的那样,不仅仅包含一个加速机会。它包含几个。 Here's an example.