在开发.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,反注册请手工执行:
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:在方法内,各个调用方法再加上父方法调用时间所占的百分比。
你也可以单击列表列表头,这将对此列排序,这样更容易找到瓶颈,找到瓶颈后,就可以开始有目标的考虑如何优化应用程序了。最后提醒一句,只要应用程序足够快就可以了,毕竟客户很少会为快一倍的应用程序多付一倍的钱,而要让应用程序快一倍所付出的努力却往往不只一倍。
分享到:
相关推荐
NProf是.NET应用程序的探查器。 该项目已移至Google Code(http://code.google.com/p/nprof/)。
关于组织参加“第八届‘泰迪杯’数据挖掘挑战赛”的通知-4页
PyMySQL-1.1.0rc1.tar.gz
技术资料分享CC2530中文数据手册完全版非常好的技术资料.zip
docker构建php开发环境
VB程序实例,可供参考学习使用,希望对你有所帮助
pytz库的主要功能 时区转换:pytz库允许用户将时间从一个时区转换到另一个时区,这对于处理跨国业务或需要处理多地时间的数据分析尤为重要。 历史时区数据支持:pytz库不仅提供了当前的时区数据,还包含了历史上不同时期的时区信息,这使得它在处理历史数据时具有无与伦比的优势。 夏令时处理:pytz库能够自动处理夏令时的变化,当获取某个时区的时间时,它会自动考虑是否处于夏令时期间。 与datetime模块集成:pytz库可以与Python标准库中的datetime模块一起使用,以确保在涉及不同时区的场景中时间的准确性。
VB程序实例-为程序添加快捷键.zip
画2、3维的隐含数
pytz库的主要功能 时区转换:pytz库允许用户将时间从一个时区转换到另一个时区,这对于处理跨国业务或需要处理多地时间的数据分析尤为重要。 历史时区数据支持:pytz库不仅提供了当前的时区数据,还包含了历史上不同时期的时区信息,这使得它在处理历史数据时具有无与伦比的优势。 夏令时处理:pytz库能够自动处理夏令时的变化,当获取某个时区的时间时,它会自动考虑是否处于夏令时期间。 与datetime模块集成:pytz库可以与Python标准库中的datetime模块一起使用,以确保在涉及不同时区的场景中时间的准确性。
加载虚拟光驱并打开ma软件.
VB程序实例-图像的缩小.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
推荐几个国外 Java 大佬的优质博客.docx
Arduino一分钟快速在vs code 编译开发Arduino
强网杯objective-c可视化演示5中的常见排序算法,包括选择排序、气泡排序、插入排序、快速排序、堆排序等.zip
VB程序实例,可供参考学习使用,希望对你有所帮助
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
强网杯