使用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效率高 ...
随机推荐
- VC++对话框中添加状态栏的方法
方法一:1.添加成员变量CStatusBarCtrl m_StatusBar;2.在OnInitDialog()中加入: m_StatusBar.Create(WS_ ...
- 企业生产环境下不同业务的linux分区建议
常规分区方案: /boot: 100M swap:内存的1至1.5倍 / : 剩余硬盘大小 DB及存储:有大量重要的数据 /boot : 100M swap: 内存的1至1.5倍,如果内存大于等于1 ...
- 用Unity的Animation播放Animator动画Clip
简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...
- pycharm3.x 注册码
PyCharm 3.0 注册码 PyCharm3 序列号 License Key 用户名:yueting3527 注册码: ===== LICENSE BEGIN ===== 93347-120420 ...
- poj 2175 Evacuation Plan 最小费用流判定,消圈算法
题目链接 题意:一个城市有n座行政楼和m座避难所,现发生核战,要求将避难所中的人员全部安置到避难所中,每个人转移的费用为两座楼之间的曼哈顿距离+1,题目给了一种方案,问是否为最优方案,即是否全部的人员 ...
- 2016031901 - ubuntu15.1安装驱动
个人使用u盘安装的ubuntu15.1,安装后找不到无线,主要是驱动没有安装的问题. 解决方案如下: 01.wife无法找到 02.pool文件夹内都是驱动,我们需要的网络驱动也在内 03.网络驱动包 ...
- Hadoop常见的45个问题解答
(大讲台:国内首个it在线教育混合式自适应学习) 1.Hadoop集群可以运行的3个模式 单机(本地)模式 伪分布式模式 全分布式模式 2. 单机(本地)模式中的注意点? 在单机模式(standal ...
- Linux下使用dnf包管理器安装异常后导致的clear不可用
该命令被包ncurses包含: 名称 : ncurses架构 : x86_64时期 : 0版本 : 5.9发布 : 16.20140323.fc21大小 : 433 k仓库 : @System概要 : ...
- android下拉选择框spinner
spinner是什么东西呢?有点像下拉菜单,其实是一个弹出窗口,但是是可以进行进一步操作的弹出窗口.你点击那个三角形的符号,弹出一个窗口,通常是列表,然后进行操作. 它在xml文件中的定义和其它控件没 ...
- Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid)
Hadoop Datanode节点无法启动(All directories in dfs.data.dir are invalid) java.io.IOException: All director ...