衡量函数和类速度的最佳方法是什么?对于每个功能,都有各种解决方案,我想知道如何测量运行速度并使用可能的最佳解决方案优化我的共享类。
此外,您如何衡量 SQL 速度,例如存储过程、选择、视图等之间的差异?
衡量函数和类速度的最佳方法是什么?对于每个功能,都有各种解决方案,我想知道如何测量运行速度并使用可能的最佳解决方案优化我的共享类。
此外,您如何衡量 SQL 速度,例如存储过程、选择、视图等之间的差异?
你有两个选择。
用于System.Diagnostics.Stopwatch
特定方法。
这是 .NET 中的高分辨率计时器,可用于代码的特定部分。
如果您需要测量整个应用程序的性能,请使用分析器。
您可以使用 Visual Studio Ultra 版本的内置分析器,或EQATEC之类的工具。
你最好使用分析器。测量挂钟执行时间(例如由Stopwatch
班级完成)的问题在于它受到许多您无法控制的因素的影响。仅举几个这样的因素,有网络和其他 I/O 延迟,以及影响应用程序和线程的相对优先级的操作系统调度程序决策。如果您在虚拟化环境中运行,这也会对毫秒范围的挂钟时间测量产生相对较大的影响。探查器并不完美,但它会让您更好地了解实际花费了多少时间来执行您的代码。
除此之外,一个好的分析器通常还可以为您提供其他有用的指标,例如您的代码在执行期间使用了多少内存。
最好不要混淆测量和优化的目标。它们是不同的任务。测量虽然有利于量化修复某事的结果,但无法告诉您要修复什么。
关于测量,如果我想展示某物的速度有多快,我需要一个可控的环境和一个好的秒表。但是,出于优化的目的,粗略的测量(例如运行 1000 次)和使用简单的计时器已经足够了。
关于优化,我不关心速度。我担心不必要的活动。无需高速运行代码即可找到它。
当任何程序运行时,它都会跟踪调用树。优化包括去除尽可能多的叶子(指令)和尽可能多的水果(I/O)。一个很好的方法是修剪整个树枝。
要找到这些,我认为挂钟时间堆栈采样是最好的方法。这不一定是一个有效的过程,并且相当少量的样本与大量样本一样好(或更好)。有必要重复执行它,因为任何给定的程序,正如第一次编写的那样,不只包含一个加速机会。它包含几个。 这是一个例子。