开源的.NET运行剖析器nprof简单使用指引
2005-03-11 00:17
393 查看
在开发.NET应用程序中,尤其是数据库+运算密集的混合应用时,时常发现应用程序运行的不够快,优化无疑是一个程序员不得不面临的问题。如何找到软件系统的瓶颈就成了摆在程序员面前的难题。微软的Application Center Test 能够帮助ASP.NET程序员随时回答性能到底恶化到哪里了,但是要找出到底应用程序的那一部分导致了运行缓慢ACT却无能为力。对于桌面型的exe应用程序,ACT就更不行了,当然有很多商业的剖析器可以回答上述问题(大多数都很贵),但最近开发的开放源代码的nprof却是最可行的方案。
nprof下载地址为:http://nprof.sourceforge.net/
在文章中使用nprof 0.9alpha版的bin分发运行包nprof-0.9b-alpha.zip进行讲解,更新版本应该类似。
nprof解压缩后,双击RegisterProfilerHook.bat注册剖析Hook,反注册请手工执行:
nprof同VS.NET 2003集成还有一些Bug,所以暂时不推荐运行RegisterVSNetAddin.bat。
完成上述操作后即可运行NProf.Application.exe。通过File->New菜单命令创建一个新的剖析器项目,选择一个要分析的exe执行程序,然后创建项目即可。对话框中Common Options的两个选项对于File项目类型都不用选。确认后按F5即可运行欲分析的exe,执行一些此exe的操作,退出后即可看到nprof详细的剖析这次操作的数据。提醒一句,当exe程序被剖析时,文档显示运行速度将会比平时慢20倍左右,因为CLR的profiling API需要记录几乎没一个调用的时间等等信息。
最后解释一下剖析的结果意义来结束本文:
# of Calls:方法被调用的次数。(注意,这里方法的含义比一般.NET含义要大,包括了委托,事件,异步调用等等,因为这些在CLR看来都是方法)
% of Total Shows in percentage:方法占总的运行时间的百分比,这里的方法运行时间由方法运行时间和创建线程运行时间两部分组成。
% in Method:方法运行时间占总的运行时间百分比,这里方法运行时间也包括了所有调用的子方法的运行时间。
% in Children:方法调用的子方法占总的运行时间的百分比。
$ Suspended:挂起时间,在你没有使用多线程时,这里应该始终为0。
当你选择任意的被方法名后,nprof还会在列表下方显示被选择方法的Calless(调用其它方法)和Callers(被其它方法调用)的一些信息,其中:
# of Calls:调用的次数
% of Total:在方法内,各个调用方法所占的百分比。
% of Parent:在方法内,各个调用方法再加上父方法调用时间所占的百分比。
你也可以单击列表列表头,这将对此列排序,这样更容易找到瓶颈,找到瓶颈后,就可以开始有目标的考虑如何优化应用程序了。最后提醒一句,只要应用程序足够快就可以了,毕竟客户很少会为快一倍的应用程序多付一倍的钱,而要让应用程序快一倍所付出的努力却往往不只一倍。
nprof下载地址为:http://nprof.sourceforge.net/
在文章中使用nprof 0.9alpha版的bin分发运行包nprof-0.9b-alpha.zip进行讲解,更新版本应该类似。
nprof解压缩后,双击RegisterProfilerHook.bat注册剖析Hook,反注册请手工执行:
regsvr32 /u bin/nprof.hook.dll
nprof同VS.NET 2003集成还有一些Bug,所以暂时不推荐运行RegisterVSNetAddin.bat。
完成上述操作后即可运行NProf.Application.exe。通过File->New菜单命令创建一个新的剖析器项目,选择一个要分析的exe执行程序,然后创建项目即可。对话框中Common Options的两个选项对于File项目类型都不用选。确认后按F5即可运行欲分析的exe,执行一些此exe的操作,退出后即可看到nprof详细的剖析这次操作的数据。提醒一句,当exe程序被剖析时,文档显示运行速度将会比平时慢20倍左右,因为CLR的profiling API需要记录几乎没一个调用的时间等等信息。
最后解释一下剖析的结果意义来结束本文:
# of Calls:方法被调用的次数。(注意,这里方法的含义比一般.NET含义要大,包括了委托,事件,异步调用等等,因为这些在CLR看来都是方法)
% of Total Shows in percentage:方法占总的运行时间的百分比,这里的方法运行时间由方法运行时间和创建线程运行时间两部分组成。
% in Method:方法运行时间占总的运行时间百分比,这里方法运行时间也包括了所有调用的子方法的运行时间。
% in Children:方法调用的子方法占总的运行时间的百分比。
$ Suspended:挂起时间,在你没有使用多线程时,这里应该始终为0。
当你选择任意的被方法名后,nprof还会在列表下方显示被选择方法的Calless(调用其它方法)和Callers(被其它方法调用)的一些信息,其中:
# of Calls:调用的次数
% of Total:在方法内,各个调用方法所占的百分比。
% of Parent:在方法内,各个调用方法再加上父方法调用时间所占的百分比。
你也可以单击列表列表头,这将对此列排序,这样更容易找到瓶颈,找到瓶颈后,就可以开始有目标的考虑如何优化应用程序了。最后提醒一句,只要应用程序足够快就可以了,毕竟客户很少会为快一倍的应用程序多付一倍的钱,而要让应用程序快一倍所付出的努力却往往不只一倍。
相关文章推荐
- 开源的.NET运行剖析器nprof简单使用指引
- 飞信虚拟机运行.net程序 使用sqlite开源数据库
- [.NET] 使用 Senparc.Weixin 接入微信公众号开发:简单实现自动回复
- 微软URLRewriter.dll的url重写在.net简单使用
- 在.Net开发中使用AnyChart的简单例子(下)
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- retrofit 开源库的简单使用
- SlidingMenu--导入开源库及简单使用
- Android开源图表控件hellocharts-android简单使用
- Asp.net+Vue2构建简单记账WebApp之二(使用ABP迅速搭建.Net后台)
- 使用jQuery UI库开发Web界面的简单入门指引
- 开源项目托管GitHub简单使用
- 使用ARM DS-5 创建、编译和运行Linux简单Hello World应用程序(入门指导)
- 一份简单的C++ 使用V8引擎运行Javascript 的例子
- [技巧.Dotnet]简单操作,实现强制.net程序以管理员身份运行。
- 使用Intel VTune性能分析器分析.NET模块运行时间 推荐
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
- .net创建一个ActiveX控件并使用的简单例子
- .NET中使用datagrid实现的简单分页效果
- 开源项目NumberProgressBar的简单使用