65.9K
CodeProject 正在变化。 阅读更多。
Home

分析 .NET 应用程序的性能

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2007年5月10日

CPOL

10分钟阅读

viewsIcon

74121

ANTS Profiler 提供了一种快速简便的方法来识别 .NET 应用程序中的性能瓶颈。此外,它还支持最新的 .NET 3.0 功能、Vista 操作系统以及 Visual Studio 集成,这进一步巩固了 ANTS Profiler 在性能分析领域的领先地位。

这是我们对 The Code Project 赞助商的展示性评测。这些评测旨在为您提供我们认为对开发人员有用且有价值的产品和服务信息。

引言

在过去两年我上次评测 ANTS Profiler 以来,用户对高性能应用程序的要求并没有发生太大变化。开发中的某些方面变得更简单了,而另一些方面则引入了新的复杂性。但有一点是肯定的:开发人员在确定和改进其应用程序的性能特征时,仍然面临着相当大的挑战。

幸运的是,ANTS Profiler 已经随着技术的发展而不断进步,能够提供一种快速简便的方法来识别 .NET 应用程序中的性能瓶颈。v3 是 ANTS Profiler 的最新版本,提供了更多功能并全面支持当前的 .NET 运行时。

分析什么

CLRProfiler 仅专注于应用程序中的内存分析,而 ANTS Profiler 可以分析应用程序中内存和时间相关的性能。我将在本文中评测的 ANTS Profiler 标准版提供了关于持续时间和基于时间性能的度量。值得注意的是,ANTS Profiler 专业版也处理内存分析。

在我评测 ANTS Profiler 的早期版本时,我曾将其与 CLRProfiler 进行过比较。这次我不再进行比较,但可以确认上次比较的结果仍然有效。也就是说,ANTS Profiler 提供了一种更快、更简单的方法来识别应用程序中的性能瓶颈。这并不是说 CLRProfiler 不应被使用,而是应该与 ANTS Profiler 结合使用。利用 ANTS Profiler 可以非常快速地识别出应用程序中最慢的部分。然后,可以使用 CLRProfiler 对该应用程序特定区域中复杂的内存管理方面进行“深度挖掘”。在 .NET 应用程序中,内存使用和性能是紧密相关的,在不考虑另一方的情况下,不应单独研究其中一方。

基础知识

ANTS Profiler 提供了对在分析过程中执行时间最长的所有方法和代码行的简洁总结。当您分析应用程序时,此方法摘要是您首先看到的内容,这也是 ANTS Profiler 的真正优势和强大之处。一个例子能最好地说明这一点。

让我们看下面的 ANTS Profiler 内部摘要屏幕截图。即使不看代码,我们也能立即知道哪些代码片段执行时间最长,以及从哪里开始检查以提高应用程序的性能。

Screenshot - Figure1.gif

图 1:分析应用程序后的初始屏幕

这个应用程序本身并不大,也不复杂。我们可以在“最慢的代码行”部分看到这一点,这是我们最感兴趣的区域。

Screenshot - Figure2.gif

图 2:最慢的代码行

最慢的行最初是应用程序的“Main”入口点,这是有道理的,因为它会在程序运行时一直执行。第二慢的代码行是执行 EncryptData 方法的行。底部的“源代码”视图验证了这一点,清晰地显示了正在执行的行及其执行持续时间。

Screenshot - Figure3.gif

图 3:源代码视图

“源代码”视图显示了执行 EncryptData 方法的代码行。该视图还表明这是最慢的代码行,带有完整的红色条。此外,我们还可以看到它花费了 0.259 秒(259 毫秒)来执行。

通过单击“最慢的代码行”窗口中的 EncryptData 条目,“源代码”视图会更新,以反映该方法内的执行时间。

Screenshot - Figure4.gif

图 4:更新后的源代码视图

EncryptData 方法中,我们可以看到 GetEncryptor 方法执行时间最长(由完整的红色条指示),花费了 0.0250 秒(250 毫秒)来执行。同样,这在“最慢的方法”窗口显示中得到了验证。

Screenshot - Figure5.gif

图 5:最慢的方法

最后,单击“最慢的方法”窗口中的 GetEncryptor 方法会更新源代码显示,向我们展示该方法中最慢执行的行。

Screenshot - Figure6.gif

图 6:更新的源代码视图 - GetEncryptor

在这里,我们可以看到这一行:

TripleDES crypto = TripleDESCryptoServiceProvider.Create();

花费了 0.244 秒(244 毫秒)来执行。这占据了大部分时间,是应用程序中效率最低的部分。

因此,通过几次鼠标点击,我们已经缩小了一个我们完全不了解的应用程序中最慢的部分。虽然这不是一个现实场景,因为我们通常会了解我们正在分析的应用程序的一些背景信息,但这突显了 ANTS Profiler 在识别应用程序中值得关注的性能区域时的易用性和速度。

不止于此…

上一节简要介绍了 ANTS Profiler 的功能,并触及了性能摘要屏幕,通常从中可以获得最有价值的性能信息。

现在,让我们更广泛地看一下 ANTS Profiler 提供的功能。

ANTS Profiler 可以分析各种类型的应用程序。向导对话框最好地说明了这一点,在其中指定了应用程序的类型。

Screenshot - Figure7.gif

图 7:要分析的应用程序类型向导对话框

可以指定所有不同类型的 .NET 应用程序,包括 ASP.NET Web 应用程序。v3 中的新功能是支持分析使用 Visual Studio® .NET 自带的 ASP.NET 开发 Web 服务器(通常称为“Cassini”)的应用程序。

ANTS Profiler 通过一个简单的向导轻松进行分析,该向导可以启动分析操作。所有指定的设置都可以保存为分析项目,然后加载和启动。这对于记录应用程序的原始性能配置文件(称为基线)并保存结果非常有用。通常,我们会修改应用程序以解决已识别的性能问题,重新加载分析项目,重新运行分析操作,然后保存新结果。生成的分析结果可以根据需要保存和重新加载,然后用于将之前的运行与当前运行进行比较,以查看修改是否有效。结果本身列在 ANTS Profiler 的“结果”窗口中。此窗口包含指向每个结果集的链接,如下所示:

Screenshot - Figure8.gif

图 8:结果窗口

为了演示这一点,我们将使用本文开头处的示例。在该示例中,我们发现以下行:

TripleDES crypto = TripleDESCryptoServiceProvider.Create();

执行时间最长,并且是我们样本应用程序性能配置文件的主要因素。显然,代码正在实例化一个基于 TripleDES 算法的加密提供程序。为了使其速度更快一些(尽管安全性稍低),我们将使用一个简单的 DES 算法,它不如 TripleDES 全面,但计算量也不那么大。修改后的行变为:

DES crypto = DESCryptoServiceProvider.Create();

现在,当我们重新运行分析项目时,可以从以下图表中看到:

Screenshot - Figure9.gif

图 9:修改后的性能运行 - 源代码窗口

基于 DES 算法的加密提供程序的实例化需要 0.204 秒(204 毫秒),而以前需要 0.244 秒(244 毫秒)。虽然单独来看改进不大(40 毫秒几乎无法察觉),但在高吞吐量应用程序中,例如处理数十万用户,任何改进都是有益的。此外,这种性能优势很容易识别。没有像 ANTS Profiler 这样的分析工具,肯定需要花费更多时间来识别它。

大局

为了完善 ANTS Profiler 提供的信息,我们可以选择“所有方法”选项卡,显示作为分析运行一部分执行的所有方法。此视图提供了分析运行中所有已执行方法的摘要:

  • 时间:方法单独花费的时间(不包括子方法)。
  • 包含子方法的时间:方法执行所花费的时间,包括子方法。
  • 命中次数:执行方法的次数。
  • 源文件:方法所在的代码源文件。
Screenshot - Figure10.gif

可以通过单击关联的标题列来对每个列进行排序,从而实现非常简单的分组。这是全面了解应用程序性能以及应用程序分析运行中每个单独执行的方法的绝佳方式。结合初始摘要视图,我们可以轻松地为应用程序创建全面的性能配置文件。

新功能

到目前为止讨论的几乎所有功能都已包含在 ANTS Profiler 的先前版本中。那么 v3 的新功能是什么呢?

增强的用户图形界面

窗口和界面元素的组织更加灵活。GUI 还包括新的停靠功能,使其在行为和管理便捷性方面更像 Visual Studio。

与 Visual Studio 集成

安装 ANTS Profiler 后,Visual Studio 中会出现一个新的菜单,可以调用 ANTS Profiler 并立即启动分析向导。方便的是,向导会自动打开在 Visual Studio 中开发的应用程序。

Screenshot - Figure11.gif

图 101:Visual Studio 中的 ANTS 菜单

支持 ASP.NET 开发服务器

ANTS Profiler 支持使用代号为“Cassini”的 ASP.NET 开发服务器分析应用程序。与集成功能类似,这是 ANTS Profiler 在最新版本 Visual Studio 中提供的又一个支持方面。

快速模式性能分析

这种分析方法比标准方法能更快地分析应用程序。通常,由于分析的侵入性,应用程序的性能在分析时会恶化。快速模式在一定程度上缓解了这个问题,但此功能仅在 ANTS Profiler 专业版中可用。

分析 API

ANTS Profiler 现在公开了一个 API(应用程序编程接口),允许通过您自己的应用程序访问和控制 ANTS Profiler 的分析操作。

支持 64 位应用程序

64 位应用程序越来越普遍,并且将来会更加普遍。ANTS Profiler 完全支持对这些类型的应用程序进行分析。

支持所有最新的 .NET 3.0 及相关功能

ANTS Profiler 已更新,全面支持 Microsoft® Windows® Vista® 操作系统以及 Vista 自带的 Internet Information Server 7。此外,还支持最新的 .NET 功能系列,例如 .NET 3.0 Framework、Windows Communication Foundation、Windows Workflow Foundation、Windows Presentation Foundation 和 XBAP 技术。

试用期结束后查看和导出分析结果

ANTS Profiler 最新版本中最有趣的功能之一是,在试用期结束后仍可以查看和导出分析结果。显然,这是 Red Gate 的一种支持方式,有效地表明一些人会使用试用版软件来分析他们的应用程序,然后可能会购买一份副本。而且,由于 Red Gate 知道这些人会发现该软件对他们的需求非常有用,所以他们不想因为您使用了试用版而阻碍分析工作。至少,这是我的理解……

结论

最新的 ANTS Profiler 已经随着时间的推移而不断发展,以支持所有最新的技术集和功能。ANTS Profiler 的第一个版本以很小的代价提供了快速、无痛的性能分析和全面的结果。这一基本理念没有改变,也是使用 ANTS Profiler 的核心优势。

对最新的 .NET 3.0 功能、Vista 操作系统、开放 API 设计以及额外的 Visual Studio 支持和集成的支持,巩固了 ANTS Profiler 在性能分析领域的领先地位,在时间与性价比都至关重要的领域。

© . All rights reserved.