使用CPU探查器优化XAML程序
如果您正在开发一个使用 XAML (是否是 c + +、 C# 或 VB) 的 Windows 商店应用程序,还有一个好的机会来提高应用程序的性能。为了帮助完成这一点,我们所有在售的能够应用开发 Windows 商店应用程序Visual Studio 都包含了CPU 探查器程序(这意味着我们已经将原本 visual stduio的一个额外属性 包含在 Visual Studio的高级功能的移动CPU剖析 两个版本中)。在这篇文章,我会教会您如何使用CPU 事件探查器剖析您执行最频繁的代码来提高性能。
这篇文章,我会分析一个叫BubblePopper的简单游戏,它是用 C# 和 XAML 开发的。这个游戏有左右漂移的气泡,它们可以飘向屏幕的顶部,单击或按下上他们会导致他们的泡沫爆裂。

不幸的是,每当一个泡沫改变方向我注意到它似乎暂停了短暂的时间,导致很不好的体验。所以我要去探查器用于分析这种行为。
收集数据
BubblePopper的解决方案一旦在 Visual Studio 中打开,我使用"调试-> 启动性能分析"来启动探查器。

这将构建和部署我的应用程序,然后启动附加探查器。如果第一次使用探查器, Visual Studio会弹出 vsperf.exe 的提示
一旦我的应用程序启动和运行,在 Visual Studio 中,我看到的让我知道数据收集正在进行的"进步分析"页。从这里我可以暂停数据收集以及停止分析。

在气泡活动的时间段,我想提高应用程序的性能。对于泡沫波普尔的应用程序只是玩游戏大约一分钟,让泡沫上浮时点击一下戳破它们。
大约一分钟,我有信心我收集了足够的数据来得到我的应用程序性能的一个准确的描述后,所以我返回到 Visual Studio,并单击"停止收集"。
简要概述了 CPU 采样
下一步,理解CPU采样是如何工作的是这项工作的关键。在分析问题之前,我会简略解释 CPU 采样之的原理。CPU采样收集调用堆栈每毫秒进行一次,针对CPU每个核心。
一旦停止收集数据,会生成数据摘要。报告之后,才会显示哪些方法在调用堆栈最频繁 (非独占样本数)。这意味收集的数据时间越长,得到的分析结果越准确。
需要注意的,(JMC)这个属性。如果勾选了JMC (just my code ),分析器收集到数据样本只会与指定的代码相关。这是一个有用的特性,这就是为什么我们有默认打开它。


分析报告
在单击停止分析之后,将停止数据收集、 目标应用程序将被终止,对报告的分析将开始。在此过程中,探查器将尝试使用您的Visual Studio 符号设置加载符号

摘要页
分析完成后您将看到的第一页是摘要页。摘要页包含三个主要领域的信息:
- CPU 图表: 显示您的应用程序随着时间的推移相关的CPU 的使用率。
- 热路径: 这是您的应用程序花费时间最长的调用路径 (基于非独占样本数)
- 耗时最多的函数: 大多数 CPU 时间花在 (基于独占样本)这些函数调用上

在这里我想指出 CPU 事件探查器要帮我改善我的应用程序的性能,即使我的应用程序不使用高百分比的CPU。这是因为即使应用程序的问题不出在 CPU占用上 ,也可以通过热路径来分析最可能产生的问题。
关于符号的快速说明。如果你注意到在 [mscorlib.ni.dll] 上面截图出现的函数做最多的工作。当模块名称将显示在方括号中它意味着为此模块未被加载符号。当模块名称中有".ni"时,这表示它是一个 NGENd 的托管的模块。有关 NGENd 模块的符号的说明请参阅创建 NGEN Pdb 的分析报告.
函数详细信息
当我点击摘要页中的函数名称 (如上面我做),就会打开该函数的函数的详细信息视图。顶部显示我在中捕获的样品的百分比:
- 调用当前函数的函数 (如果有) 的比例
- 当前函数,直接调用的百分比
- 当前函数所有调用的函数之间的样本分布

图表展示了我的应用程序支出 ~27.5%的时间花在完成创建新的每一个气泡。要改善这种情况,我要去尝试:
- 重新使用现有的演示图板,刚刚结束只需要更新的 x 和 y DoubleAnimation 属性
- 将 DoubleAnimation 对象存储为泡沫类中的属性,所以他们不需要从 TimelineCollection 中检索
- 存储目标 x 和 y 坐标,在泡沫中的属性类,所以他们不需要从 DoubleAnimation 对象中检索
这会导致下面的 moveBubble_Completed 实现(已经离开了原来的大多数代码注释掉,以帮助突出显示所做的更改)。

调用堆栈视图
现在,我认为改善了。但我还要查看其他可疑的地方。

看看该调用关系树,只有其他调用路径似乎有相当数量的样品耗时花在 nvwgf2um.dll 。

这不是我的应用程序的一部分,但.dll 文件快速搜索告诉我它是我的显示驱动程序,这个没有太多的优化可以做了。
启动该应用程序显示气泡改变方向得更加顺畅,所以它看起来像已经实现了我的目标,改进了我的应用程序中的性能。
结语
虽然这是一个简单的关于 Windows 应用商店应用程序的例子,希望它可以帮助你了解如何使用 CPU 事件探查器来提高应用程序中的性能。
使用CPU探查器优化XAML程序的更多相关文章
- SQL Server 2008 事件探查器(SQL SERVER Profiler)
要想很好地优化ERP系统,可以从客户端.服务器.网络等入手,对于我们M1系统的优化来说,SQL 语句的优化就起到很重要的作用了.为此,我们展开,学习了SQL SERVER 2008的事件探查器(SQL ...
- 【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)
跟踪数据库sql语句的执行情况.例:一个系统,用到了sql server 数据库,这个系统共有500张表,当用户在前台页面做某一个操作时,比如插入,登录等等,我们想知道此刻是在对哪一张表操作,打开事件 ...
- 江湖恩仇录之PHP程序CPU高占用优化经历分享
故事起因 本故事根据真实故事书写,如有雷同绝非巧合.在开发过程中难免反复修改程序,面对突然起来的问题难免束手无策,有些人选择自我处理问题,也有人选择交流区域咨询,或许恰巧有人有类似的问题,刚好可以解决 ...
- Unity Shader着色器优化
https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247493518&idx=1&sn=c51b92e9300bcf ...
- 10个技巧优化PHP程序Laravel 5框架
10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...
- 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)
一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...
- flask-profiler, 监视端点调用并尝试进行某些分析的Flask 事件探查器
源代码名称:flask-profiler 源代码网址:http://www.github.com/muatik/flask-profiler flask-profiler源代码文档 flask-pro ...
- 利用VS 性能探查器 解决代码性能不高问题
VS2017 分析-性能探查器 选择你想分析的项目,选择你的分析工具,我这边是遇到了一个cpu爆满的问题 启动后需要点击一下记录cpu,否则会没有后续的分析忘了截图了,下面是出的分析报告,分析时间比较 ...
- 怎么优化JAVA程序的执行效率和性能?
现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...
随机推荐
- JS的this本质
1.this究竟为何物? 1.1 全局上下文(Global context ) 在全局运行上下文中(在任何函数体外部),this 指代全局对象window,无论是否在严格模式下. alert(this ...
- 微信开发之开发环境搭建( visual studio 2015we + IIS express + ngrok)
1. 申请个人测试使用的微信订阅号 https://mp.weixin.qq.com 可注册微信订阅号. 不会?请自行百度. 2. 安装 ngrok 微信开发首先要解决如何让微信链接到本地开发环境.有 ...
- 设置Tomcat应用自动部署目录
只需要在Tomcat/conf目录下面新建文件夹Catalina/localhost,然后再localhost文件夹下面新建一个[应用名字.xml]文件即可,有多少个应用就新建多少个xml文件即可,x ...
- android打造万能的适配器(转)
荒废了两天,今天与大家分享一个ListView的适配器 前段时间在学习慕课网的视频,觉得这种实现方式较好,便记录了下来,最近的项目中也使用了多次,节省了大量的代码,特此拿来与大家分享一下. 还是先看图 ...
- Java OCR tesseract 图像智能字符识别技术 Java实现
Java OCR tesseract 图像智能字符识别技术 Java代码实现 接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码 ...
- [BZOJ 3774] 最优选择 【最小割】
题目链接:BZOJ - 3774 题目分析 此题与“文理分科”那道题目有些类似.都是使用最小割来求解,先加上可能获得的权值,在减掉必须舍弃的权值(最小割). 文理分科是规定每个人和 S 连就是选文,和 ...
- BZOJ 3715: [PA2014]Lustra
Description Byteasar公司专门外包生产带有镜子的衣柜.刚刚举行的招标会上,有n个工厂参加竞标.所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大.最小宽度和最大.最小高度. ...
- 对于 APM 用户的一次真实调查分析(下)
一.前言 对 APM 用户的一次真实调查分析(上)中,我们主要聊到了现阶段国外 APM 行业对各个企业的渗透率.大部分使用 APM 工具的企业规模以及 APM 工具在用户心中的地位等问题,有兴趣的朋友 ...
- ORMBase对象/关系型数据库映射在MVC中的应用
ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...