.NET性能调优之一:ANTS Performance Profiler的使用

 

.NET性能调优系列文章

系列文章索引

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

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

ANTS Performance Profiler的基本使用

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

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

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

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

 1 static void Main()
2 {
3 var list = new List<int>();
4
5 var sum = 0;
6 for (var i = 0; i < 10000; i++)
7 {
8 sum += i;
9 list.Add(i);
10 }
11 Console.WriteLine(sum);
12
13 //find the value use linq: 1000
14 var result = list.Where(p => p.Equals(1000));
15 foreach (var i in result)
16 {
17 Console.WriteLine(i);
18 }
19 Console.ReadKey();
20 }

编译程序后,启动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,所以只是写了段简单的代码作演示,它的强大之处还待你真正遇到性能问题使用它时去好好体会。

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

如果文章对你有点帮助,推荐一下吧,谢谢 :)

使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题

 

一、前言

最近一段时间,网站经常出现两个问题:

1.内存占用率一点点增高,直到将服务器内存占满。

2.访问某个页面时,页面响应过慢,CPU居高不下。

初步判断内存一点点增多可能是因为有未释放的资源一直在占用内存,而cpu居高不下可能是因为执行了耗时的操作。

下面我们就使用ANTS Performance Profiler和ANTS Memory Profiler这两个工具来分析具体原因。

--------------------------------------------------------

工具下载地址:ANTS Performance Profiler 8 安装包+激活工具+教程

官方文档:https://documentation.red-gate.com/dashboard.action

需要注意的是:安装完成后会有两个工具,如下图:

二、CPU分析

我们打开内存分析工具,如下:

点击New profiling session 按钮:

点击Start profiling 按钮结果如下:

从上图授权的方法是最耗时也是请求最频繁的方法,针对这种现象我们可以把用户的权限放在session中从而减少连接数据库的次数,进而提高性能

通过分析我们可以找出最耗时的方法,最耗时的请求URL,最耗时的sql语句,通过这些分析我们可以轻松找出程序的性能短板,从而有针对性的进行优化

三、内存分析

启动内存分析工具:

点击Start profiling 按钮结果如下:

点击Class list,我们可以看出哪些类型的数据占用的内存最高:

点击上图画圈的地方如下:

双击上图中的绿条,结果如下:

将图放大到绿色的地方结果如下:

通过上述方法,我们可以找出需要改进的地方,针对性的进行优化

[转]ANTS Performance Profiler和ANTS Memory Profiler 使用的更多相关文章

  1. 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题

    一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...

  2. ANTS Performance Profiler和ANTS Memory Profiler

    使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题   一.前言 最近一段时间,网站经常出现两个问题: ...

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

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

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

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

  5. .NET性能调优之一:ANTS Performance Profiler的使用

    .NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调 ...

  6. MVC+MEF+UnitOfWork+EF架构,网站速度慢的原因总结!(附加ANTS Memory Profiler简单用法)

    (最近使用内存分析工具ANTS Memory Profiler,以及其他网友提供的意见发现最终导致内存泄漏的就是MEF,在此特地更新下,与大家分享!最下面红色字体) 最近参考使用了郭明峰的一套架构来做 ...

  7. .NET Memory Profiler 查看内存使用情况

    1 简介 .Net Memory Profiler(以下简称Profiler):专门针对于.NET程序,功能最全的内存分析工具,最大的特点是具有内存动态分析(Automatic Memory Anal ...

  8. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...

  9. NET Memory Profiler 跟踪.net 应用内存

    NET Memory Profiler 跟踪.net 应用内存 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇 作者:肖波      .net 框架号称永远 ...

随机推荐

  1. [Java] 项目红色叹号 案例1则

    一般红色叹号是build path出错. 除了检查出错的library外,还要注意Order an Export选项中未勾选的Library. 之前导入项目后,没有勾选JRE和Maven Depend ...

  2. hello2源代码解析

    String username = request.getParameter("username");/**以 String 形式返回请求参数"username" ...

  3. ceph crush的问题

    ceph crush的问题看一遍忘一遍,现将<ceph源码分析>一书中相关章节摘抄如下: 4.2.1 层级化的Cluster Map例4-1 Cluster Map定义层级化的Cluste ...

  4. C# 用 WebClient 的 Post 方法向 WebServer 传输数据

    帮朋友做一个通过Web简单传输数据的例子,百度了一下抄了段代码,完成,效果如下: 其中textBox1里面是客户端需要传输过去的数据,textBox2里面是接收到的返回数据. 代码如下: using ...

  5. day057 基于对象和基于双下划线的多表查询

    单表查询和多表查询的添加与查询                   上述关系:author-authordetail是一对一的关系(外键在author上名为authors),  book-publis ...

  6. 隐藏WORDPRESS账户登录错误信息

    将下面的脚本添加到当前主题的functions.php文件中. function no_wordpress_errors(){  return 'Something is wrong!';}add_f ...

  7. LoadLibrary和GetModuleHandle

    0x01  区别 LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数,每调用一次,引用计数增加一,需要通过相同步骤地调用FreeLibrary来减少引用次数,当为0时,系统 ...

  8. 浅谈URI和URL

    URI(Uniform Resource Identifier)字面上的意思是,统一资源标示符 URL(Uniform Resource Locator),统一资源定位符 光从字面上的意思,这个2个东 ...

  9. L2-016. 愿天下有情人都是失散多年的兄妹(深搜)*

    L2-016. 愿天下有情人都是失散多年的兄妹 参考博客 #include<iostream> #include<cstdio> #include<cstring> ...

  10. httpd does not appear to be running and proxying cobbler, or SELinux is in the way.

    当我们执行cobbler check时,出现这种错误:httpd does not appear to be running and proxying cobbler, or SELinux is i ...