作为一名.NET开发者,深知初次编写的应用程序很少能如所愿地表现良好。常见的问题包括性能瓶颈和内存泄漏。性能瓶颈可能导致应用程序在一段时间内无响应,而内存泄漏则会导致应用程序随着运行时间的增长而不断消耗更多的内存。为了有效解决这些问题,需要一种有效的应用程序性能分析方法——这正是ANTS Profiler的用武之地。
ANTS Profiler是一款为.NET开发者设计的代码性能分析工具,它可以帮助开发者深入了解性能和内存问题。技术测试人员也使用ANTS Profiler来精确定位到代码的具体行或确定优化的范围。
ANTS Profiler的第一个版本为.NET开发者提供了一个非常简单的工具,用于分析他们使用VS.NET 2002编写的ASP.NET Web应用程序的性能。自首次发布以来的4年里,Red Gate不断开发和完善这个工具。最新版本增加了一些非常实用的新功能,使工具完全支持在Windows Vista平台上进行性能分析。
ANTS Profiler 2.7允许分析几乎所有正在开发的.NET代码。它支持使用任何.NET语言(C#、VB.NET、托管C++等)编写的.NET桌面应用程序,并针对任何.NET Framework版本(.NET 1.0、1.1和2.0)。还可以分析ASP.NET Web应用程序和.NET Windows服务。
2.7版本中一个不错的特性是,在Windows 2003服务器上分析ASP.NET Web应用程序的方式。不再需要重启Web服务器来分析Web应用程序。实际上,可以保持原始网站运行,并分析在完全独立的过程中运行的站点的单独实例!
当使用ANTS Profiler调查应用程序的性能时,分析结果会立即显示运行最慢的“前10行”代码。将能够看到编写的源代码,这让能够快速地开始最擅长的工作——修复代码!
还可以查看每个方法执行所需的时间,从最慢到最快。还可以对应用程序运行时的内存使用情况进行快照,看看消耗了多少.NET内存。ANTS Profiler将突出显示最大的“内存消耗者”,但也会显示所有活动对象以及它们仍然在内存中的原因。快速比较几个快照是发现应用程序内存泄漏的一个很好的方法。
让开始使用ANTS Profiler分析一个应用程序。当启动ANTS Profiler时,项目向导会引导设置分析器。首先需要指明对性能分析还是内存分析感兴趣。
接下来,选择正在分析的应用程序类型(Windows Forms、ASP.NET等)。
之后,只需填写应用程序的详细信息,以及感兴趣的分析区域——例如,通常会从分析有源代码的方法开始——然后就可以开始了!
当选择分析ASP.NET时,ANTS Profiler会从IIS中找出当前正在运行的网站,并在下拉列表中显示它们——这是另一个让使用工具变得更容易的不错的设计。
当对应用程序的性能进行分析时,有一些有用的额外功能值得研究。例如,在主工具栏上,可以禁用分析器,暂时停止ANTS Profiler收集任何统计数据。一个有用的提示是禁用分析器,加载ASP.NET Web应用程序——这样在禁用分析的情况下会更快,然后一旦主页面出现就启用分析器。
还可以重置分析器,以便从应用程序的一小部分收集性能数据。如果想要调查一个特定的瓶颈,这可以是一个非常有用的技术。
当关闭应用程序时,ANTS Profiler会自动生成结果。然而,也可以在应用程序运行时对性能或内存进行快照。
在调查瓶颈时,性能结果的摘要通常是首先查看的地方。在这里,可以看到关于应用程序的基本信息,然后,更重要的是,应用程序中最大的潜在瓶颈的前10名列表。
点击一个特定的慢速代码行自然会显示该行的源代码:
// 示例代码
for (int i = 0; i < 1000000; i++) {
// 模拟耗时操作
}
红色条形图引导找到最慢的代码行,这样就可以立即看到从哪里开始进行更改,以真正让应用程序运行得更快。
ANTS Profiler还包括一个显示所有已分析方法的视图。可以通过几次点击来对它进行分组和筛选,以查看与最相关的数据。例如,在这里按它们所属的程序集对方法进行了分组:
.NET提供了一个托管内存模型,所以内存泄漏已经成为过去,对吗?错!尽管.NET的自动内存管理让.NET开发者的生活更加愉快(谁喜欢为每个C++类编写析构函数),但仍然很容易在应用程序中引入内存泄漏。像任务管理器和性能监视器这样的工具可能会显示应用程序正在使用大量的内存,但只有像ANTS Profiler这样的专用内存分析器才能真正显示哪些对象构成了那部分内存以及它们为什么还在那里。
.NET使用垃圾收集模型来管理内存。垃圾收集器会不时运行,并计算出应用程序中哪些对象仍然是“活动”的。任何不再活动的对象都可以被收集,内存被释放。基本上,如果一个对象可以通过另一个“活动”对象到达,那么它仍然是“活动”的。可以将.NET内存可视化为一个巨大的蜘蛛网,其中单独的线代表对象之间的链接。
ANTS Profiler的内存分析部分显示了所有活动对象以及将它们连接起来的“蜘蛛网”的具体部分,这样可以看到采取哪些步骤来释放内存并修复泄漏。
通常,大量的内存存储在数组中。下面的截图显示了一个数组的层次结构。在右侧看到数组中包含的所有对象。一个相当常见的错误是向数组添加许多对象,但从未移除它们(即使它们不再需要!)。这将始终导致内存泄漏,因为数组将永远保持对象的活动状态。
另一种常见的调查内存问题的技术是比较两个内存快照。通常会:
在应用程序运行时拍摄一个应用程序的快照
继续运行认为正在泄漏内存的应用程序的一部分,然后
拍摄第二个快照。
在ANTS Profiler中,可以通过过滤“所有对象”面板仅显示“新”对象来比较这两个快照。
这个过滤视图现在只显示自第一个快照以来创建的对象。如果期望没有内存被创建,那么所有这些对象就构成了内存泄漏。可以使用层次结构面板查看其他引用它们的对象,从而找出它们为什么没有被垃圾收集。
ANTS Profiler是市场上最好的.NET分析工具之一。它为提供了所需的信息,简单快捷。它向展示了需要优化的代码部分,以提高应用程序的整体性能,并为最终用户提供更愉快的体验!
它易于使用,产生的结果使任何.NET开发者都能够轻松地寻找代码中的潜在瓶颈。调查内存问题既有趣又有趣,使修复内存泄漏变得简单。
如果想了解更多信息,有许多优秀的ANTS Profiler的
评论。一位评论者将其描述为“一个优秀的工具,可以让真正精确地定位那些给最终用户带来最大麻烦的代码部分”。