【實戰指南】基于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.pswp.cn/pingmian/72681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72681.shtml
英文地址,請注明出處:http://en.pswp.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;接收請求&…