.NET性能调优系列文章

系列文章索引

在使用.NET进行快速地上手与开发出应用程序后,接下来面临的问题可能就是程序性能调优方面的问题,而性能调优有时候会涉及方方面面的问题,如程序宿主系统、数据库、网络环境等等,而当程序异常庞大复杂的时候,性能调优将变得更加无从下手。

本系列文章主要会介绍一些.NET性能调优的工具、Web性能优化的规则(如YSlow)及方法等等内容。成文前最不希望看到的就是园子里不间断的“哪个语言好,哪个语言性能高”的争论,不多说,真正的明白人都应该知道这样的争论有没有意义,希望我们能从实际性能优化的角度去讨论问题。

ANTS Performance Profiler的基本使用

ANTS Performance Profiler是RedGate旗下强大的性能调优产品,官方产品页面在这里

先来看一下软件的基本使用。

使用下面这段代码进行简单的测试。

这是一个控制台应用程序,程序很简单,先进行10000次循环,输出和,再使用LINQ在list里找出1000的值输出。

static void Main()
{
var list = new List<int>(); var sum = ;
for (var i = ; i < ; i++)
{
sum += i;
list.Add(i);
}
Console.WriteLine(sum); //find the value use linq: 1000
var result = list.Where(p => p.Equals());
foreach (var i in result)
{
Console.WriteLine(i);
}
Console.ReadKey();
}

编译程序后,启动ANTS Performance Profiler,会自动弹出向导页面,在此页面中,可以看到软件支持多种.NET程序的性能监控,如EXE、web、Windows Service等等。

而在Performace Counters中可以根据需要选择多种计数器,IO、内存分配、处理器等等。

针对测试DEMO,选择编译后的exe文件路径,因为刚才是debug编译,所以选择程序文件夹下\bin\Debug\里面的exe即可。

在Profiling Mode里可以选择监控的级别,基本就是监控信息的多少与速度的权衡,默认选择“最详细”即可。其他的详细设置可以参考帮助文档。

点击“Start Profiling”,启动程序。

分析结果的查看与分析

软件的基本工作原理是在.NET编译出的IL代码里放入钩子用来记录时间,然后通过直观的界面显示出哪部分代码耗能最大。所以这是性能调优最直接的方法,针对最耗时的代码段进行优化即可。

点击“Start Profiling”后启动之前编译的程序,软件开始执行,如果是其他交互程序如winform、web等,操作完需要进行性能调优的功能后,在顶部的运行时间轴里用鼠标选定需要查看的时间段即可,一般有性能问题的时间段会出现一个波峰,选定那个时间段即可。

选定后可以立即在下面的结果窗口中看到最耗时的方法,比如上面的DEMO,当然性能都消耗在了Main函数上。

软件提供了多种度量值查看性能损耗,有百分比和多种时间格式,这里选定“秒”作为度量单位。

再选择要查看的函数,软件强大之处就显现出来了。

  • 右侧的红色标线,点击可以快速定位到最耗能的代码,颜色越深表示那段代码越耗能。
  • 左侧可以看到行号,此段代码执行的次数(Hit Count),平均执行时间,总的执行时间,当然还可以同时看到代码供分析使用。

至于DEMO里这段代码为什么第一次执行Console.WriteLine如此耗能,我想如果你认真看了《CLR via C#》的第一章就应该能知道答案了。

当然你还可以点击层次结构图标,查看更加直观的性能损耗,就像下面这样。

这样的层次结构图还有一个好处就是可以看到.NET Framework的内部实现。

当进行一些决策,比如是用原生的功能还是第三方组件时,这个功能会变得非常好用,因为通过它能比较直观的地看到内部实现的性能瓶颈在哪里。

结语

ANTS Performance Profiler是我性能调优时最先使用也是最喜欢使用的工具,所以放在了第一篇文章里来分享给大家,希望能给各位带来点帮助。

它非常的直观、强大,因为手头复杂的项目不适合用来做DEMO,所以只是写了段简单的代码作演示,它的强大之处还待你真正遇到性能问题使用它时去好好体会。

文章有所疏漏和要补充的,请留言一起讨论,也请关注后续的相关文章。

作者:Parry 
出处:http://www.cnblogs.com/parry/archive/2013/01/04/DotNet_Performance_Tuning_ANTS_Performance_Profiler.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

.NET性能调优之一:ANTS Performance Profiler的使用的更多相关文章

  1. 数据库实例性能调优利器:Performance Insights

    Performance Insights是什么 阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优.负载监控和关联分析的利器,以简单直 ...

  2. 一目了然 | 数据库实例性能调优利器:Performance Insights

    Performance Insights是什么 阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优.负载监控和关联分析的利器,以简单直 ...

  3. WPF性能调试系列 – Ants Performance Profiler

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...

  4. ANTS Performance Profiler 8:支持对Web请求、异步代码和WinRT的性能剖析

    下载与激活:http://download.csdn.net/detail/lone112/6734291 离线激活   位于英国的Red Gate Software有限公司最近发布了ANTS Per ...

  5. IOS性能调优系列:使用Time Profiler发现性能瓶颈

    硬广:<IOS性能调优系列>第五篇,预计会有二十多篇,持续更新,欢迎关注. 之前四篇都是关注于内存方面,分析了内存泄漏.僵尸对象.内存分配,本篇介绍Time Profiler工具的使用,开 ...

  6. linux 性能调优工具参考 (linux performance tools)

    之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # li ...

  7. [转]ANTS Performance Profiler和ANTS Memory Profiler 使用

    .NET性能调优之一:ANTS Performance Profiler的使用   .NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使 ...

  8. [网站性能2]Asp.net平台下网站性能调优的实战方案

    文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言    最近帮朋友运营的平台进行了性能调优,效果还不错, ...

  9. Asp.net平台下网站性能调优的实战方案(转)

    转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来 ...

随机推荐

  1. 关于NSDate和NSDateFormatter的几个常用方法

    /** *  NSDate常见类方法 */ // 获得当前时间 NSDate *date1 = [NSDate date];   // 类方法 // NSDate *date1 = [[NSDate ...

  2. Eclipse下link方式安装插件

    一.eclipse安装位置和存放文件位置 eclipse安装位置:D:\ProgramFile\eclipse存放文件:D:\mydep 二.下载插件 这里下载的是PropertiesEditor解压 ...

  3. CollectionView 简用

    创建一个CollectionView 分为几个步骤 1.先创建布局FlowLayout 设置布局格式 2.创建CollectionView 并使用布局Flowlayout  -initWithFram ...

  4. [android] 手机卫士自定义控件的属性

    上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性 上一节组合控件SettingItemView中有三个控件,分别是TextView大标题,TextView描述, ...

  5. iOS App打包流程

    1.什么是打包 将应用程序统一放在一个后缀是ipa的文件中,然后发给其他人,可以安装在手机上供用户或测试人员安装 2.可安装ipa的前提 ①说清楚是哪一个应用程序(App Id) ②可以安装在哪一台设 ...

  6. android图片缓存(包含ReusableBitmapDrawable和BitmapPool)

    现在做的项目中,有用到一个开源的2D地图框架osmdroid,但是在项目中,使用还是有一些问题,例如,多个地图实例,会有独自的图片缓存,Activity onPause时,并不会释放图片缓存,如果多级 ...

  7. JavaScript Patterns 3.4 Array Literal

    Array Literal Syntax To avoid potential errors when creating dynamic arrays at runtime, it's much sa ...

  8. Asp.Net远程调试

    1.在本地找到VS安装目录下的 Visual Studio Tools 文件夹  并进入Remote Debugger Folder文件夹 2.根据服务器的操作系统是32位还是64位,选择下面的文件夹 ...

  9. javascript图片库

    将图片发布到网上的办法很多,可以简单地把所有图片都放在一个网页中,但是会导致这个网页过于庞大.为每张图片分别创建一个网页的解决办法值得考虑,但是制作过程需要花费非常多的时间和精力. 如果想要两全其美, ...

  10. 移动语义 && 函数调用过程中的 lvalue

    当以一个函数内的临时变量对象作为另一个函数的形参的时候,原函数内的临时对象即 rvalue,就会成为此函数内的 lvalue. 这样会重新导致效率低下,因为造成了大量复制操作. <utility ...