如何最好地测量函数和类的速度?对于每个函数,都有各种解决方案,我想知道如何测量运行速度,并使用最佳解决方案优化我的共享类。
此外,如何衡量SQL速度,例如存储过程、选择、视图等之间的差异?
如何最好地测量函数和类的速度?对于每个函数,都有各种解决方案,我想知道如何测量运行速度,并使用最佳解决方案优化我的共享类。
此外,如何衡量SQL速度,例如存储过程、选择、视图等之间的差异?
你有两个选择。
使用 System.Diagnostics.Stopwatch
来测量特定方法的性能。
这是 .NET 中的高分辨率计时器,您可以用它来测量代码的特定部分。
如果您需要测量整个应用程序的性能,请使用性能分析器。
您可以使用 Visual Studio 的 Ultra 版本中内置的分析器,或者像 EQATEC 这样的工具。
Stopwatch
类所做的)的问题在于它受到许多超出您控制范围的因素的影响。仅举几个这样的因素,有网络和其他I/O延迟,以及操作系统调度程序决策,这些决策会影响应用程序和线程的相对优先级。如果您正在虚拟化环境中运行,那么这也可能对毫秒级墙钟时间测量产生相对较大的影响。分析器不会完美无缺,但它将为您提供更好的执行代码所需时间的概念。最好不要混淆测量和优化的目标。它们是不同的任务。测量虽然有助于量化修复问题的结果,但很难告诉你应该修复什么。
在测量方面,如果我想展示某个东西有多快,我需要一个受控环境和一台好的秒表。然而,为了进行优化,粗略的测量(例如运行1000次)和使用简单的计时器已经足够了。
在优化方面,我关心的不是速度,而是不必要的活动。没有必要以高速运行代码来找出它。
当任何程序运行时,它都会形成一个调用树。优化的方法包括尽可能删除尽可能多的叶子(指令)和果实(I/O)。剪枝整个分支是一个不错的方法。