VS2010 Profile性能分析

来源:互联网 发布:网络加油站网站 编辑:程序博客网 时间:2024/05/01 21:14
使用VS2010及其VS系列的分析菜单下的“启动性能向导”。
一、基本Profile分析
1)摘要视图可以选择指定的区域进行分析,比如成功运行以后的,或者高峰点进行右键筛选分析。
2)调用关系树视图 可以看到总体的性能消耗函数。
3)调用和被调用视图,可以主要的性能开销调用路径。
4)函数视图可以看到每个函数的调用情况:
    定位入口点“非独占样本数”指示该函数及其调用的任何函数所执行的工作量。 高非独占计数指向整体消耗资源最多的函数。
    具体性能瓶颈函数:“独占样本数”指示函数体中的代码执行的工作量(不包括该函数调用的函数所执行的工作量)。 高独占计数可能表示函数本身存在性能瓶颈。 
    双击函数名称可以进去具体的函数分析,对非独占样本数大的函数右键菜单中可以选择由该函数调用的函数视图,分析性能瓶颈。
二、更多的Profile分析
可以创建筛选器,请注意,此筛选适用于性能报告中的所有视图。这也是 Visual Studio 分析器自动显示已筛选数据的新摘要页面的原因。当使用CPU样本分析时候,当进程在等待磁盘、网络或任意其他资源时,Visual Studio 分析器均不会收集样本。这就是如果应用程序并未有效使用 CPU,建议使用检测分析的原因。通过使用检测分析,可准确测量各种数据,如运行函数所花时间(“经过的时间”)、函数的调用次数以及函数正在使用 CPU(“应用程序时间”)且未被 OS 切换出来的时间。
通过同时使用采样和检测,还可收集基于 Microsoft® .NET Framework 的应用程序的内存分配数据。用户可使用性能会话属性页面启用和调整 .NET 内存分配数据的收集。
注意其它的分析视图模式,摸索下 就知道了。

三、定位到具体的函数,分析性能原因(基本都是程序员逻辑问题,非系统语言等外部原因),采用改进方法
尽量避免重复无用的计算;避免计算和减少 计算的方法;或者将计算提前或者延迟,来提高CPU消耗。或者用多线程来并发计算,提高性能。使用高效的内存容器,缓存内存。
优化设计:实时监测改为回调驱动,频繁申请改为一次申请内存或者使用内存池,不需要的数据量及时删除避免无谓的遍历和搜索。
优化算法:O(N2)向O(N),O(1)转换。
优化查找:用orderhash_map,hash_map来提高性能;切断查找不再需要的就不查找了。
优化排序:提前排序好,使用更小的集合。
优化:优化底层库,LockBits 代替SetPixel,比如用Shader代替CPU计算,用内存文件映射代替io函数,用order_map代替map,用epoll/iocp网络模式。
优化内存数据结构:内存池,或者使用缓存,来避免不断的new delete内存;贴图纹理内存共享等,及时删除不需要的。
优化IO:使用内存文件映射,和使用缓存避免很多的IO。
优化表达式:计算表达式用位运算更快,不需要的提前运算好,尽量避免重复无用的计算。
优化对象管理:避免隐性的构造和析构,提高对象的性能。

四、重新Profile分析,对比性能报告,得到改进后的效果
右键单击报告,并单击上下文菜单中的“Compare Performance Reports”(比较性能报告)选项。通过比较样本数(越低性能越好),比较百分比来得到性能提升KPI。
更多Profile使用见:
https://msdn.microsoft.com/zh-cn/library/ms182372.aspx
https://msdn.microsoft.com/zh-cn/library/z9z62c29.aspx
http://www.cnblogs.com/ZlgHimm/archive/2008/12/05/1348457.html
0 1