如果您正在开发一个使用 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 符号设置加载符号

摘要页

分析完成后您将看到的第一页是摘要页。摘要页包含三个主要领域的信息:

  1. CPU 图表: 显示您的应用程序随着时间的推移相关的CPU 的使用率。
  2. 热路径: 这是您的应用程序花费时间最长的调用路径 (基于非独占样本数)
  3. 耗时最多的函数: 大多数 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程序的更多相关文章

  1. SQL Server 2008 事件探查器(SQL SERVER Profiler)

    要想很好地优化ERP系统,可以从客户端.服务器.网络等入手,对于我们M1系统的优化来说,SQL 语句的优化就起到很重要的作用了.为此,我们展开,学习了SQL SERVER 2008的事件探查器(SQL ...

  2. 【转】SQL Server 2008 事件探查器(SQL SERVER Profiler)

    跟踪数据库sql语句的执行情况.例:一个系统,用到了sql server 数据库,这个系统共有500张表,当用户在前台页面做某一个操作时,比如插入,登录等等,我们想知道此刻是在对哪一张表操作,打开事件 ...

  3. 江湖恩仇录之PHP程序CPU高占用优化经历分享

    故事起因 本故事根据真实故事书写,如有雷同绝非巧合.在开发过程中难免反复修改程序,面对突然起来的问题难免束手无策,有些人选择自我处理问题,也有人选择交流区域咨询,或许恰巧有人有类似的问题,刚好可以解决 ...

  4. Unity Shader着色器优化

    https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247493518&idx=1&sn=c51b92e9300bcf ...

  5. 10个技巧优化PHP程序Laravel 5框架

    10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...

  6. 一步步做程序优化-讲一个用于OpenACC优化的程序(转载)

    一步步做程序优化[1]讲一个用于OpenACC优化的程序 分析下A,B,C为三个矩阵,A为m*n维,B为n*k维,C为m*k维,用A和B来计算C,计算方法是:C = alpha*A*B + beta* ...

  7. flask-profiler, 监视端点调用并尝试进行某些分析的Flask 事件探查器

    源代码名称:flask-profiler 源代码网址:http://www.github.com/muatik/flask-profiler flask-profiler源代码文档 flask-pro ...

  8. 利用VS 性能探查器 解决代码性能不高问题

    VS2017 分析-性能探查器 选择你想分析的项目,选择你的分析工具,我这边是遇到了一个cpu爆满的问题 启动后需要点击一下记录cpu,否则会没有后续的分析忘了截图了,下面是出的分析报告,分析时间比较 ...

  9. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

随机推荐

  1. Python 基础篇:字符串、列表操作

    字符串操作 判断是否为数字 string = "200" string.isdigit() >>false 待完善.. 列表操作 列表是我们最以后最常用的数据类型之一, ...

  2. Python Socket,How to Create Socket Cilent? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  3. ASP.NET 学习博客

    ASP.NET MVC5 网站开发实践 http://www.cnblogs.com/mzwhj/p/3537145.html 基于MVC4+EasyUI的Web开发框架形成之旅 http://www ...

  4. python 读取SQLServer数据插入到MongoDB数据库中

    # -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, ...

  5. hdu 4267

    一个很不错的题: 刚刚看到这个题目就感觉要用线段树或者树状数组,但是有感觉有点不同: 敲了一发简单的线段树之后果断的T了: 网上一搜题解,发现要用55颗线段树或者树状数组: 一共有k种树,然后每种树根 ...

  6. "Money, Money, Money"

    acdream1408:http://115.28.76.232/problem?pid=1408 题意:给你一个x,让你构造a,b,是的na+bm可以组成大于x的所有的数.a>1,b>1 ...

  7. POJ 1275 Cashier Employment(差分约束)

    http://poj.org/problem?id=1275 题意 : 一家24小时营业的超市,要雇出纳员,需要求出超市每天不同时段需要的出纳员数,午夜只需一小批,下午需要多些,希望雇最少的人,给出每 ...

  8. linux下监控jvm 使用的方法

    之前一直用jconsole监控jvm,图形界面简单易用,最近因为需要在纯linux下进行操作,所以总结了一下 linux下监控jvm的例子,这次主要用到了jstat工具, 各个参数意义: jstat ...

  9. ps 命令使用总结

    ps命令用来查看进程信息,它是类似于快照类型的只显示一次,如果想及时刷新请用top命令. 1. 常用参数列表 -a 显示所有终端机下执行的进程,除了阶段作业领导者之外. a 显示现行终端机下的所有进程 ...

  10. [topcoder]IncrementAndDoubling

    http://community.topcoder.com/stat?c=problem_statement&pm=12790&rd=15708 这道题只有两个操作,一是加一,二是数组 ...