衡量函数和类速度的最佳方法是什么?对于每个功能都有各种解决方案,我想知道如何测量运行速度并使用最佳解决方案优化我的共享类。
另外,您如何衡量SQL速度,例如存储过程,选择,视图等之间的差异?
答案 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.