预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

性能:使用VisualStudio分析器找出应用程序瓶颈页码,1/7 ©2008MicrosoftCorporation.All rightsreserved. 性能 使用VisualStudio分析器找出应用程序瓶颈 HariPulapakaandBorisVidolov 本文讨论:本文使用了以下技术: 以性能瓶颈为目标 VisualStudio2008 应用程序代码分析 比较分析数据 性能报告 目目目录目录录录 在过去十年间,涌现了许多新的软件技术和平台。每种新技术都要求掌握专门的知识才能创建出性能良 好的应用程序。现在,由于各种Internet技术(如博客)使失望的用户可轻松地否定您的应用程序, 因此您确实需要将性能放到首要位置。在计划早期,就应添加响应性能要求并创建原型来确定可能的技 术限制。在整个开发过程中,还应衡量应用程序的各个性能方面以发现可能的性能下降,同时确保速度 较慢情形下的测试人员文件并跟踪其错误。 即使拥有最好的计划,仍必须在产品开发过程中调查性能问题。在本文中,我们将向您展示如何使用 VisualStudio®TeamSystemDevelopmentEdition或VisualStudioTeamSuite来确定应用程序中的性 能瓶颈。将通过演练一个示例性能调查来向您介绍VisualStudio分析器。请注意,尽管我们在本文中 是使用C#来编写代码示例,但是此处的大部分示例对于本机C/C++和VisualBasic®代码也同样有 效。 应用程序分析 我们将使用先前提及的两个VisualStudio版本所附带的分析器。首先编写一个用于绘制Mandelbrot不 规则图形的小型示例项目(如图图图图1所示)。该应用程序不是非常有效,并且需要约10秒钟才能绘制 出不规则图形。 Figure1性能测试的目标标标程序标程序(单击该图像获得较大视图) 要开始调查,从VisualStudio2008的新“Analyze”(分析)菜单启动“PerformanceWizard”(性能 向导)。在VisualStudio2005中,此功能可从“工具”|“性能工具”菜单获得。从而启动一个包含 三个步骤的向导,其中第一步是指定目标项目或网站。第二步提供两种不同的分析方法:采样和检测。 (有关这些分析方法的详细信息,请参阅“性能分析解释”侧栏。)现在,我们将选取默认值。 向导完成后,显示一个“PerformanceExplorer”(性能资源管理器)对话框并创建一个新的性能会 话。此会话包含目标应用程序(在我们的示例中为Mandel)并且没有报告。要启动分析,单击工具窗 口工具栏中的“LaunchwithProfiling”(启动并分析)按钮。 应用程序绘制完不规则图形后,立即关闭窗体停止分析。VisualStudio自动将一个新创建的报告添加到 性能会话中并开始进行分析。分析完成后,VisualStudio分析器会显示“PerformanceReport Summary”(性能报告摘要),列出开销最大的函数(请参见图图图2)。报告以两种方式显示这些函 数。第一种方式衡量所列出函数直接或间接执行的工作。对于每个函数,数字代表在函数主体及其所有 子调用中收集的积累样本。第二个列表不计算在子调用中收集的样本。此摘要页面显示VisualStudio http://msdn2.microsoft.com/zh-cn/magazine/cc337887(printer).aspx2008-4-17 性能:使用VisualStudio分析器找出应用程序瓶颈页码,2/7 分析器在执行DrawMandel方法期间收集了30.71%的样本。剩余69%的样本则分散在其他各个函 数间,在此就不加赘述。要了解更多有关报告选项的信息,请参阅侧栏“报告可视化选项”。 Figure2性能测试显示示示开销较示开销较大的函数数数调数调调调用用用用(单击该图像获得较大视图) 请查看报告的“CallTree”(调用树)视图(如图图图图3所示),“InclusiveSamples%”(包含样本 %)列代表在函数及其子项中收集的样本。“ExclusiveSamples%”(独占样本%)列代表仅在函数 主体中收集的样本。可看到DrawMandel方法直接调用Bitmap.SetPixel。尽管DrawMandel自身占据 了总样本的30.71%,但VisualStudio分析器从Bitmap.SetPixel及其子项收集了64.54%的样本。 其中Bitmap.SetPixel主体仅占0.68%(因此它并未显示在摘要页面上)。但是,Bitmap.SetPixel通 过其子项产生了大部分处理。它才是应用程序的真正瓶颈。 F