Welcome

首页 / 软件开发 / .NET编程技术 / CLR全面透彻解析: 及早并经常评量性能,第2部分

CLR全面透彻解析: 及早并经常评量性能,第2部分2011-10-26 msdn Vance Morrison在上期的“CLR 全面透彻解析”中,我强调要可靠地创建高性能的程序,您需要了解设计 初期所使用的各个组件的性能(msdn2.microsoft.com/magazine/cc424899)。这就需要用到性能数据。 因此,测量是设计过程中不可或缺的一部分。

我还在那一期中介绍了一款名为 MeasureIt 的工具,利用它可以轻松地创建新基准,从而快速地收集 制定良好设计决策所需的数据。诸如 MeasureIt 之类的工具所提供的原始数字是极为重要的,另外,使 人们能够了解这些数字的基本含义也非常重要。在此理解的基础上,您在实际测量之前即可预测出它的某 些性能。这就是我将在这里讨论的内容。

MeasureIt 概述

如果您尚未下载 MeasureIt 工 具,我强烈建议您立即下载。该工具位于《MSDN® 杂志》网站中本专栏的下载代码内,由一个 EXE 文件组成。运行它将生成一个网页,显示运行某个基准套件的结果。安装后,可通过运行以下命令访问其 他文档:

measureIt /usersGuide
MeasureIt 随同其源代码一起出现,使用 /edit 限 制符可以方便地将其解压缩。这使得添加新基准就像编写一两行代码(并提供要定时的代码)一样轻松。 有关如何执行此操作的更多详细说明,请参阅用户指南。

MeasureIt 基准与不同的性能区域相关 联,当该工具启动时会在命令行上指示出来。 默认情况下(即无命令行参数),MeasureIt 会运行一组 基准(约 50 个),其中包括各种基本的 Microsoft® .NET Framework 运行时操作。图 1 中显示了 简化的示例输出。

Figure 1 示例基准

名称中值平均值标准偏差最小值最大 值示例
NOTHING [count=1,000]0.0000.0370.1100.0000.36610
MethodCalls:EmptyStaticFunction() [count=1000 scale=10.0]1.0001.1030.4960.8572.57710
ObjectOps:new Class() [count=1000 scale=10.0]5.06010.22313.9273.34051.21510
ObjectOps:new FinalizableClass() [count=1000 scale=10.0]78.552155.408168.59564.997629.24310
ObjectOps:(Class) Activator.CreateInstance(classType)]102.510102.9494.07696.876109.81910
Arrays:localIntPtr[i] = 1 [count=1,000 scale=10.0]0.7130.6640.0760.5740.77310
Arrays:string[i] = aString [count=1,000 scale=10.0]3.4023.4050.0123.3973.44210
Delegates:aInstanceDelegate() [count=1,000 scale=10.0]1.2351.2050.1111.0941.47510
MethodReflection:Method.Invoke EmptyStaticFunction()472.283472.7445.409466.291482.09410
P/Invoke:FullTrustCall() [count=1,000]6.1846.2540.7935.4697.59910
P/Invoke:10 FullTrustCall() (10 call average)2.6692.6880.0612.6652.87010
P/Invoke:1 PartialTrustCall [count=1,000]27.80630.4408.73526.34356.58210
MeasureIt 将每个基准运行 10 次,并根据结果计算统计数据。这些报告值随即被标量化 ,从而使对空方法的单个调用花费一个时间单位。例如,图 1 显示分配某个小对象的中值时间为 5.06, 这表示通常分配小对象仅是调用方法所花费时间的五倍多一点。但并非所有的情况都是如此。请注意,对 象分配的最长时间要超过 51 个单位。因此,它所花费时间经常要比平均情况更长。事实上,如果该基准 不幸强制收集大量碎片,则其在方法中花费的时间很可能要比此处报告的最大值多出许多。

即便 如此,您还是应该能发现 MeasureIt 工具的价值。几乎无需进行任何工作,您即可粗略地获知小型分配 的开销如何。由于工具会收集多个示例并计算统计数据,因此您还会了解到某些操作(如对象分配)可具 有相当多的变化,这才是重点。通过了解最小值、最大值和标准偏差信息,您可以确定是否足以信赖测量 的可靠性。