翻譯|行業資訊|編輯:龔雪|2023-02-15 10:42:44.363|閱讀 143 次
概述:在本文中,將為大家記錄9個提升WPF應用程序冷啟動性能的策略。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在上文中(點擊這里回顧>>),我們主要介紹了針對三個技術的WPF應用程序性能提升,本文將著重介紹針對DevExpress WPF界面控件研發的應用程序如何提升性能!
PS:有用控件推薦~DevExpress WPF擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。
DevExpress技術交流群7:674691612 歡迎一起進群討論
如果您的應用程序包含帶有多個項的DevExpress Ribbon控件,按需加載頁面可以幫助應用減少啟動時間。
要啟用延遲RibbonPage項加載,請將RibbonPage的RibbonPageGroups移動到GroupCollectionTemplate。
<dxr:RibbonControl RibbonStyle="Office2019"> <dxr:RibbonDefaultPageCategory> <dxr:RibbonPage Caption="File"> <!-- ... --> </dxr:RibbonPage> <dxr:RibbonPage Caption="Home"> <dxr:RibbonPage.GroupCollectionTemplate> <DataTemplate> <ItemsControl> <dxr:RibbonPageGroup Caption="File"> <dxb:BarButtonItem ... /> <dxb:BarButtonItem ... /> </dxr:RibbonPageGroup> </ItemsControl> </DataTemplate> </dxr:RibbonPage.GroupCollectionTemplate> </dxr:RibbonPage> </dxr:RibbonDefaultPageCategory> </dxr:RibbonControl>
由于WPF在主線程中使用UI,整個窗口將保持凍結狀態,直到所有元素都被加載,DevExpress LoadingDecorator允許開發者異步加載獨立的UI部分:
通過執行這個策略,您的應用程序可以在屏幕上加載“較重”的元素之前顯示“較輕”的UI元素。在上面的動畫中,我們將視圖的右側部分封裝在LoadingDecorator中,以首先顯示輕量級導航菜單,只有當它完全加載時才會顯示正確的部分:
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <dxa:AccordionControl> <!--...--> </dxa:AccordionControl> <dx:LoadingDecorator Grid.Column="1"> <dxdo:DockLayoutManager> <!--...--> </dxdo:DockLayoutManager> </dx:LoadingDecorator> </Grid>
如果應用程序使用選項卡接口,則可以使用不同的選項卡緩存模式對性能進行微調。此功能可在WPF Tab控件(DXTabControl)和WPF (當使用選項卡文檔組或時)中使用。
默認情況下,選項卡不緩存,這對于初始啟動很好。但是如果您決定第二次打開同一選項卡,其內容將再次加載。若要使用先前加載的元素,請在選擇后緩存選項卡。此操作由TabContentCacheMode屬性控制(對于DXTabControl, LayoutGroup和DocumentGroup),將TabContentCacheMode設置為cachetabsonselection來啟用此策略。
如果選項卡切換比啟動性能更重要,您可以將TabContentCacheMode設置為CacheAllTabs。在這個實例中,所有選項卡都將與第一個選項卡一起加載和緩存,這可能會顯著增加視圖加載時間,但其他選項卡將切換得更快,即使是第一次打開它們。
雖然應用程序可能處理大量數據,但用戶可能不需要一次性查看所有數據。許多WPF控件允許您按需加載數據,以下DevExpress WPF組件支持虛擬化/按需數據加載:
GridControl
ComboBoxEdit, LookUpEdit, ListBoxEdit
TreeListControl
PivotGridControl
SchedulerControl
DevExpress組件包含主題使用的許多XAML資源,當一個組件第一次顯示時,WPF解析所有這些資源。您可能已經注意到,第二次顯示相同的控件所花費的時間要少得多,即使該控件之前在不同的視圖中顯示。
DevExpress主題允許您在組件顯示在屏幕上之前部分加載主題資源,雖然這不會加快主視圖的速度,但所有子視圖都會更快地打開,您可以使用下面的代碼來實現這個策略:
using DevExpress.Xpf.Core; public partial class App : Application { protected async override void OnStartup(StartupEventArgs e) { base.OnStartup(e); await ThemeManager.PreloadThemeResourceAsync("Office2019Colorful"); } }
如果您的應用程序使用啟動畫面,您可以在其中預加載主題資源。
View/ViewModel初始化中的某些操作可能會產生不必要的啟動延遲,如果您與遠程服務同步通信、處理大文件或在View/ViewModel構造函數中執行其他資源密集型操作,則可能發生這些延遲。
Visual Studio包含一個內置的性能分析器,以幫助確定與性能相關的問題的確切原因。要發現耗時的操作,請遵循以下步驟:
(1)在Visual Studio中跳轉到Debug -> Performance Profiler。
(2)選擇CPU Usage復選框然后單擊Start。
(3)當應用程序加載時,單擊Stop Collection來在分析選項卡中查看CPU使用數據,分析器將自動突出顯示有問題的方法。
您可以單擊各個方法導航到詳細的調用樹。
正如您可以從上面的圖像(取自測試應用程序)中看到的,ProcessData方法(由ViewModel構造函數調用)消耗了大量的資源,解決此問題的一種方法是異步處理操作。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網