【实战指南】基于DevExpress轻量化主题实现WPF应用性能升级

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

如果您的下一个基于DevExpress的(经典主题的)WPF应用程序加载速度快了一倍?如果这可以通过一个简单的主题改变来实现呢?

通过从经典的DevExpress主题切换到轻量级的DevExpress WPF主题,您可以提高启动速度,减少内存消耗,并增强整体响应能力。在这篇文章中,我们将概述轻量级主题的好处和更新应用程序时需要考虑的关键因素,并向您展示如何将轻量级WPF主题合并到项目中。

点击获取DevExpress WPF v24.2正式版

应用程序启动

DevExpress官方在v23.2发布周期中引入了轻量级主题,与v23.1中的经典主题相比,轻量级主题提供了以下启动性能改进:

界面控件DevExpress中文使用教程

注意:实际的性能增益将根据.NET版本,是否使用Ngen或ReadyToRun,以及其他特定于应用程序的因素而变化。

为了实现这些改进,官方技术团队彻底检查了WPF主题的实现,并进行了以下优化:

  • 重组资源字典以减少搜索深度。
  • 删除了默认DeepBlue主题中不必要的部分。
  • 重新组织主题键来使用更少的类并减少JIT编译。
  • 增强了从DevExpress.Images库加载图像的缓存。

这些增强减少了与JIT初始化、XAML解析和资源加载相关的时间(为了进一步减少启动时间,考虑在应用程序中启用多核JIT和ReadyToRun)。

视图切换

除了启动时间之外,轻量级主题优化还有助于提高视图切换性能。正如您所期望的那样,用户现在可以在第二次打开视图时更快地与DevExpress的UI控件进行交互。

界面控件DevExpress中文使用教程

有了这个改变,您可以期待更快的标签切换、导航、面板对接/卸载,以及增强的应用响应能力。

内存使用情况

因为我们现在使用更少的XAML资源,轻量级主题消耗更少的内存(RAM和本地磁盘使用)。

界面控件DevExpress中文使用教程

有效的内存管理有助于减少性能问题并降低笔记本电脑等设备的功耗,这一点在旧设备上尤其重要,因为当RAM不足时,操作系统可以在本地磁盘上创建交换文件。

由于所有轻量级主题都共享多个XAML资源,因此我们将它们组合成一个只需要11 MB空间的程序集(相比之下,在一组类似的经典主题中需要10个程序集,总共72 MB空间)。

简化调色板颜色访问

除了性能和内存增强之外,轻量级主题还简化了调色板颜色的使用。要在应用中引用主题颜色,只需在ThemeResource扩展中指定颜色名称:

<Border BorderBrush="{dxci:ThemeResource ThemeKey='Brush.Border'}"/>

您还可以根据当前应用的主题指定不同的颜色:

<Border BorderBrush="{dxci:ThemeResource ThemeKey='Brush.Border,
Win11Light=Brush.Custom.Red'}" />

通过引用默认颜色,您可以在应用中同步DevExpress/其他UI元素的外观。

升级路径到轻量级主题

要激活轻量级主题,添加DevExpress.Wpf.ThemesLW包,并在应用程序启动时调用以下代码:

CompatibilitySettings.UseLightweightThemes = true;
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.Win11Light.Name;

如果您定制了经典主题,请注意以下内容:

  • 轻量级主题不支持DevExpress WPF主题设计器。如果您主要使用主题设计器进行颜色自定义,则可以使用自定义调色板覆盖颜色。此技术允许您指定大多数主题颜色,而无需构建新的程序集。对于更复杂的自定义,可以使用内置控件API或修改主题资源。
  • 与经典主题相比,轻量级主题资源具有不同的关键字名称。如果您已经覆盖了应用程序中的经典资源,它们中的大多数应该适用于轻量级主题,但可能需要进行微小的修改。例如,ThemeName属性不能用于旧的主题键。

切换到轻量级主题应该很简单,但是即使您选择继续使用经典主题,也要考虑升级到v23.2或更新版本,因为该版本也提高了经典主题的性能。与v23.1相比,您可以期待高达30%的启动性能改进。

未来更新

官方将在未来的发布周期中继续致力于性能增强(我们期望在v25.1发布周期中优化WPF富文本和字体编辑器中的字体加载性能)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++多线程】C++异步线程池提交任务的写法和解释

// 提交任务到线程池 template<class F, class... Args> auto ThreadPool::enqueue(F&& f, Args&&... args) -> std::future<typename std::result_of<F(Args...)>::type> {using return_type typename std::result_of<F(Args...)>…

CSS 属性选择器详解

CSS 属性选择器详解 引言 CSS(层叠样式表)是网页设计中的重要组成部分,它用于控制网页元素的样式和布局。属性选择器是CSS选择器的一种,它允许开发者根据元素的特定属性来选择和样式化元素。本文将详细讲解CSS属性选择器的概念、语法以及常用属性选择器的使用方法。 一、…

二维前缀矩阵

1.大衣的旅行 #include<bits/stdc.h> #define int long long using namespace std; int t; int n,m,k; bool check(int mid,vector<vector<int>>pre,vector<vector<int>>a) {for(int i1; i<n; i){for(int j1; j<m; j){//枚举以老师房间为…

python-leetcode 56.电话号码的字母组合

题目&#xff1a; 给定一个仅包含数字的2-9的字符串&#xff0c;返回所有它可能表示的字母组合&#xff0c;答案可以按任意顺序返回 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;&#xff0c;注意1不对应任何字母 方法一&#xff1a;深度优先搜索&#x…

keepalived应用

Keepalived 是一个基于 VRRP&#xff08;虚拟路由冗余协议&#xff09;实现的高可用解决方案&#xff0c;常用于构建高可用性的服务器集群&#xff0c;特别是在负载均衡场景中&#xff0c;可确保服务的不间断运行。以下为你详细介绍它&#xff1a; 0主要功能 高可用性&#x…

5.0 VisionPro调用USB相机的方法与步骤说明(一)

本文介绍如何在C#中调用visionPro以处理USB相机采集到的图片。示例如下: 主要思路如下: 1. 使用AForge来打开以及采集usb相机照片。 usb相机处于一直运行状态。每隔100ms采集一次照片。且触发一次事件。 public void Start() { this.videoSourcePlayer.Stop(); …

论文阅读:Deep Hybrid Camera Deblurring for Smartphone Cameras

今天介绍一篇 ACM SIGGRAPH 2024 的文章&#xff0c;关于手机影像中的去模糊的文章。 Deep Hybrid Camera Deblurring for Smartphone Cameras Abstract 手机摄像头尽管取得了显著的进步&#xff0c;但由于传感器和镜头较为紧凑&#xff0c;在低光环境下的成像仍存在困难&am…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上&#xff01; mv指令 m…

Unity大型游戏开发全流程指南

一、开发流程与核心步骤 1. 项目规划与设计阶段 需求分析 明确游戏类型&#xff08;MMORPG/开放世界/竞技等&#xff09;、核心玩法&#xff08;战斗/建造/社交&#xff09;、目标平台&#xff08;PC/移动/主机&#xff09;示例&#xff1a;MMORPG需规划角色成长树、副本Boss…

Unity WebGL IIS报错无法使用

Unity WebGL IIS报错无法使用 原因1&#xff1a;WebGL文件夹无访问权限 右键WebGL文件夹-属性 点击安全-编辑-添加 输入ever点击确定-应用即可

【JDK17】开源应用服务器大比对

接着 next-public 源代码分析&#xff0c;Java 应用服务器选用 jetty。但是之前普遍使用 Tomcat&#xff0c;那为什么要用 jetty 么&#xff0c;除了这两个&#xff0c;Java 应用服务器开源现状并不了解&#xff0c;故而又是一篇科普性的笔记&#xff0c;以下是 又小又快的 Jav…

docker-compose install nginx(解决fastgpt跨区域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全措施,它允许或拒绝来自不同源(协议、域名、端口任一不同即为不同源)的网页访问另一源中的资源。它的主要作用如下: 同源策略限制:Web 浏览器的同源策略限制了从一个源加载的文档或脚本如何与另一…

算法刷题记录——LeetCode篇(4) [第301~400题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何…

vulnhub靶场之loly靶机

前言 挑战攻克该靶机30分钟 靶机&#xff1a;loly靶机&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用桥接网卡模式 文章涉及的靶机及工具&#xff0c;都可以自行访问官网或者项…

Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】

在测试工作中&#xff0c;需求文档中的图片&#xff08;如界面设计图、流程图&#xff09;往往是测试用例生成的重要参考。然而&#xff0c;手动提取图片并识别内容不仅耗时&#xff0c;还容易出错。本文将通过一个自研小工具&#xff0c;结合 PaddleOCR 和大模型&#xff0c;自…

Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式

目录 COUNTIF和COUNTIFS函数COUNTIF函数COUNTIFS函数SUMIF和SUMIFS函数SUMIF函数SUMIFS函数SUMIFS函数与控件实现动态年月汇总ROUND、ROUNDUP、ROUNDDOWN函数单元格混合引用条件格式与公式,标记整行数据MATCH和INDEX函数COUNTIF和COUNTIFS函数 COUNTIF函数 统计下“苏州”出现…

上位机数据可视化:使用QtCharts绘制波形图

工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含头文件以及名称空间&#xff08;这个很重要&#xff0c;没有包含名称空间编译器会提示找不到相关的类型&#xff09; #include <QtCharts&g…

S32K144入门笔记(十三):LPIT的API函数解读

目录 1. SDK中的函数 2. API函数的释义 2.1 获取默认参数 2.2 初始化 2.3 启动与停止 2.4 计数值的设置于读取 2.5 中断API 1. SDK中的函数 在使用SDK的非抽象驱动函数时&#xff0c;函数的定义与声明在文件lpit_driver.c和lpit_driver.h中&#xff0c;一共有19个函数&a…

CSS - Pseudo-classes(伪类选择器)

目录 一、介绍二、常用种类三、案例实现案例一&#xff1a;a标签使用link/visited/hover/active案例二&#xff1a;表单元素使用focus/disabled案例三、通过其余伪类实现元素灵活选中 一、介绍 CSS 伪类&#xff08;Pseudo-classes&#xff09; 用于定义元素的特定状态或结构位…

http proxy的原理是什么

Http代理的原理 代理服务器会自动提取请求数据包中的HTTP请求数据发送给服务端&#xff0c;并将服务端的HTTP响应数据转发给发送请求的客户端&#xff0c;HTTP代理服务器使用的端口通常是8080。 对于Web客户端来说&#xff0c;代理扮演的服务器角色&#xff0c;接收请求&…