首页 > 其他分享 >WPF性能优化:Visual Studio性能分析工具使用介绍

WPF性能优化:Visual Studio性能分析工具使用介绍

时间:2024-02-29 10:55:17浏览次数:30  
标签:线程 快照 性能 应用程序 Visual UI 内存 Studio 使用率

在硬件性能不断提升的现在,软件性能依旧是开发人员关注的重点。不同类型的程序关注的具体性能指标有所不同,服务器程序注重吞吐量,游戏引擎追求渲染效率,桌面程序则关注内存消耗以及界面加载效率和流畅性。当我们需要进行性能优化时,首先需要找到性能瓶颈。本文将介绍两个WPF性能优化分析工具:内存使用率应用程序时间线的使用。

内存使用率#

内存使用率是Visual Studio中集成的诊断工具之一,适用于.Net程序查找内存泄漏或者低效内存适用情况。

默认情况下,调试程序时诊断工具窗口会自动开启停靠在右侧或者底部。如果因为个人适用习惯关闭了诊断工具窗口,可以通过顶部菜单栏找到“调试”—>“窗口”—>“显示诊断窗口”或者快捷键Ctrl+Alt+F2打开诊断工具窗口。

诊断工具窗口可以查看程序运行过程CPU和内存消耗的变化,鼠标悬浮在进程内存消耗图上时,会显示任意时间点的内存消耗。

要查看内存使用情况时,可以在诊断工具窗口的内存使用情况选项卡点击“截取快照”按钮。通常我们会在内存显著增加前后各截取一次内存快照,然后对比两次快照中对象和堆大小的差异。
image

上图中显示了两次截图快照的时间、对象个数和堆中的字节数。其中第二条快照信息中对象个数和堆大小中括号内的数值是相对于第一条快照中的变化。对象个数和堆大小这两列中的数值是以超链接形式显示,点击后可以打开选定快照的堆视图。显示了快照捕获的完整的对象集,包括了各类型对象的个数,对象实例大小和非独占大小。点击表头可以对选定列进行排序。
image

并且可以通过堆视图左上角类型筛选器快速查找指定类型的内存信息。下图中显示内存中增加了1800个Student对象实例,占用大约158KB内存。
image

应用程序时间线#

应用程序时间线工具集成在Visual Studio中的性能探测器中,用于查找XAML应用程序交互相关的性能问题。该工具提供了详细的视图显示XAML应用程序(目前不支持Avalonia)资源使用情况,可以查看UI线程使用率,可视化吞吐量,UI元素解析、布局及呈现、网络及磁盘I/O所耗费的时间。

使用应用程序时间线工具时,只需单击“调试”—>“性能探测器”或者使用快捷键Alt+F2,在“XXX.diagsession 窗口”中看到分析工具。勾选应用程序时间线后点击“开始”按钮进行性能数据收集。需要停止分析时,点击分析窗口左上角的“停止收集”按钮,等待一会儿就会生成详细的视图。在诊断会话窗口的分析工具列表中有个“内存使用率”,勾选后也可以分析内存使用情况(上一小节已详细介绍)。
image

UI线程使用率#

UI线程使用率以柱状图的形式呈现每个时间点UI线程使用情况,并用不同色块区分ui元素解析、布局、呈现、I/O、应用程序代码、Xaml其他使用UI线程的占比。UI线程使用率过高的时间点可能表示应用程序响应能力较差,是性能优化需要关注的地方。
image

可视吞吐量(FPS)#

“可视吞吐量(FPS)” 折线图显示了应用程序的 UI线程和复合线程上的每秒帧数 (FPS),较低的帧速率也意味着应用程序响应能力较差。
image

时间线详细信息#

时间线详细信息视图呈现了每个时间点占用CPU的UI框架子系统和系统组件以及它们占用时间。
主要包括以下几类:

  • 解析:分析XAML文件并创建对象或者元素所消耗的时间。
  • 布局:计算所有需要布局的元素的大小和位置耗用的时间(即在ArrangeMeasureApplyTemplateArrangeOverrideMeasureOverride中所用的时间)。在大型应用程序中,可能会同时在屏幕上显示数千个元素。此显示可能会导致UI帧速率降低以及应用程序响应能力相应地变差。
  • 呈现:在屏幕上绘制XAML元素所耗用的时间。
  • I/O:从本地磁盘或从通过Microsoft Windows Internet (WinINet) API访问的网络资源中检索数据所耗用的时间。
  • 应用程序代码:执行与分析或布局无关的应用程序(用户)代码所耗用的时间。
  • Xaml其他:执行 XAML 运行时代码所耗用的时间。

时间线详细信息视图分为左中右三列。左侧显示事件名称,绝大部分事件是发生在UI线程上,这些事件名称前有一个紫色线条标记,非UI线程上的事件则无标记。中间一列顶部显示时间轴,下边显示每个事件的色块标记(与UI线程使用率中色块颜色一致)、持续总计时间(自身和子元素持续时间的总和)和自身持续时间,鼠标悬浮在元素上会显示自身持续时间和事件开始时间。右侧一列则显示选中事件的详细信息描述。
image

上边示例中,UI线程使用率过高,耗时最长的是布局,开始于6.91秒,总耗时6.56秒,涉及33237个元素,其原因就是TreeView没有开启虚拟化,一次性把所有的数据都渲染出来,导致UI响应差。通过这个分析找到性能瓶颈,就可以有的放矢进行优化。这里只需开启虚拟化即可,现实开发中导致性能瓶颈的原因多种多样,需结合实际情况优化解决。

小结#

内存使用率应用程序时间线是WPF开发过程中不可或缺的两个有效工具,此外,Snoop以及Visual Studio中的实时可视化树、实时属性资源管理器、XAML实时预览、XAML绑定失败、辅助功能检查等工具也能提高开发调试效率。

参考#

https://devblogs.microsoft.com/visualstudio/analyze-cpu-memory-while-debugging/
https://learn.microsoft.com/zh-cn/visualstudio/profiling/application-timeline?view=vs-2022

 

2024-02-29 10:51:38【出处】:https://www.cnblogs.com/czwy/p/18041898

=======================================================================================

标签:线程,快照,性能,应用程序,Visual,UI,内存,Studio,使用率
From: https://www.cnblogs.com/mq0036/p/18042950

相关文章

  • WPF性能优化:性能分析工具
    在硬件性能不断提升的现在,软件性能依旧是开发人员关注的重点。不同类型的程序关注的具体性能指标有所不同,服务器程序注重吞吐量,游戏引擎追求渲染效率,桌面程序则关注内存消耗以及界面加载效率和流畅性。当我们需要进行性能优化时,首先需要找到性能瓶颈。本文将介绍两个WPF性能优化分......
  • 【Azure Logic App】添加 Storage Account 来提升 Logic App 的性能
    文章原文:https://techcommunity.microsoft.com/t5/azure-integration-services-blog/scaling-logic-app-standard-for-high-throughput-scenarios/ba-p/3866731ScalingLogicAppStandardforHighThroughputScenariosLogicApps提供了一个强大的平台,可以无缝集成各种服务,包......
  • 对 vCenter Server 中的性能数据间断或性能数据缺失进行故障排除 (1003878)
    SymptomsGapsinperformancedataMissingperformancedata ResolutionValidatethateachtroubleshootingstepbelowistrueforyourenvironment.Eachstepprovidesinstructionsoralinktoadocument,inordertoeliminatepossiblecausesa......
  • 软件性能测试工具RunnerGo安装步骤
    现在安装RunnerGo仅需要一条命令!目前支持系统:Centos、Debian、Ubuntu三种。下面给大家介绍一下RunnerGo安装使用流程:Step1:复制以下命令wget https://img.cdn.apipost.cn/running_go/img/wiki/runnergo.tar&&tarxf runnergo.tar  &&bashinstall.shStep2:选择安装系统......
  • (笔记)FPGA设计性能优化策略漫谈(一)--时序优化
    1   速度优化 1.1 关键路径重组FPGA逻辑设计中时序路径上的组合逻辑都会给路径增加延时,从而影响设计性能的往往只有几条关键的路径而已,所以可以通过减少关键路径上的组合逻辑单元数来减小该路径上的延时,从而达到优化的目的。关键路径重组技术多用于关键路径由多个路......
  • 性能测试-TPS估算指南
    TPS(TransactionsPerSecond)即每秒处理事务数,是衡量系统性能的重要指标。以下是几种常见的TPS计算方法:普通计算方法计算公式:TPS=总请求数/总时间示例:假设在2019年第32周,系统有4.13万的浏览量,即总请求数约为41300。总时间按一周计算,即24小时*3600秒。计算:TPS=41300/......
  • 以解析csv数据为例,讨论string、char[]、stream 不同类型来源是否能进行高性能读取解析
    篇幅较长,所以首先列举结果,也就是我们的目的核心目的为探索特定场景对不同类型数据进行统一抽象,并达到足够高性能,也就是一份代码实现,对不同类型数据依然高性能以下为结果,也就是我们的目的:对1w行csv数据的string进行RFC4180csv标准进行解析,string类型csv应该比StringRea......
  • 搜维尔科技:OptiTrack 提供了性能最佳的动作捕捉平台
    OptiTrack动画我们的Prime系列相机和Motive软件相结合,产生了世界上最大的捕获量、最精确的3D数据和有史以来最高的相机数量。OptiTrack提供了性能最佳的动作捕捉平台,具有易于使用的制作工作流程以及运行世界上最大舞台所需的深度。无与伦比的3D精度我们的3D精度是业......
  • Qt QVector和vector以及QMap和map的遍历性能对比
    使用Qt中的容器给C++开发带来很大的便利,而且QVector和QMap等容器扩展的一些成员函数也是很方便的。但是Qt的这些容器和STL库的容器比,效率到底怎么样?我就写了几个简单的遍历的例子,测试了QVector、vector等容器的那些方法效率更高。测试环境:系统:windows10编译器:MingGWmingw......
  • 优化代码性能:C#中轻松测量执行时间
     概述:本文介绍了在C#程序开发中如何利用自定义扩展方法测量代码执行时间。通过使用简单的Action委托,开发者可以轻松获取代码块的执行时间,帮助优化性能、验证算法效率以及监控系统性能。这种通用方法提供了一种便捷而有效的方式,有助于提高开发效率和代码质量。在软件开发中,了......