999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Windows Presentation Foundations的項目部署和性能優化

2010-01-01 00:00:00戴伯樂
電腦知識與技術 2010年1期

摘要:針對Windows Presentation Foundation(WPF)這一全新的Windows應用程序的圖形引擎技術,該文簡要介紹了WPF的基本知識,并針對WPF的優缺點,通過個人的項目開發經歷,討論和總結在實際WPF應用程序項目中會遇到的界面開發代碼結構設計和應用程序性能兩大問題。該文主要研究如何合理部署WPF應用程序前臺界面開發的代碼結構;以及如何正確處理WPF應用程序的性能問題。

關鍵詞:Windows Presentation Foundation;WPF;XAML;界面開發;圖形引擎

中圖分類號:TP3文獻標識碼:A 文章編號:1009-3044(2010)01-227-02

The Project Deployment and Performance Improvement of Windows Presentation Foundations

DAI Bo-le

(College of Software Engineering, Southeast University, Nanjing 210000, China)

Abstract: Windows Presentation Foundation(WPF) is a next-generation presentation system for building Windows client applications with visually stunning user experiences. This article will introduce the WPF briefly. Then against the merits and drawbacks of the WPF, two major problems that developers potentially have to face in the real work will be discussed based on personal experience. One is how to deploy the UI development work in WPF project, and the other is how to handle the performance issue of the WPF application. This research will try to focus on two main topics, which are how to reasonably design and deploy the UI development work in a WPF project, and how to deal with the performance issue of the WPF application properly.

Key Words: Windows Presentation Foundation; WPF; XAML; UI development; Graphics Presentation System

隨著微軟.Net Framework 3.0的發布,新一代Windows應用程序的圖形引擎Windows Presentation Foundation(以下簡稱 WPF)開始展露頭角。作為Vista操作系統的三大核心開發庫之一,基于DirectX的WPF展現出對2D和3D的呈現方面的強大視覺效果,掀起了圖形界面開發的一場革命。此外,WPF引入了全新的開發模式,使界面設計和代碼開發更好的得到了分離,更加吸引了軟件開發人員的關注和興趣。

本文先簡要介紹WPF并總結WPF的優缺點之后,將針對WPF最令人驚喜的新一代界面開發模式和最令人煩惱的性能問題,進一步討論在WPF項目中可能遇到的設計前臺開發文件的框架結構和提高WPF應用程序的性能兩個實際問題,總結經驗并提出建議,達到幫助具有一定WPF開發經驗的廣大愛好者學習的目的。

1 Windows Presentation Foundation的優勢和缺陷

Windows Presentation Foundation (原名Avalon)是微軟新一代圖形系統,為用戶界面、2D/3D 圖形、文檔和媒體提供了統一的描述和操作方法,是.NET Framework 3.0的重要組件。WPF構建合并了 UI、媒體和文檔的豐富 Windows 智能客戶端用戶體驗,其核心是一個與分辨率無關并且基于向量的呈現引擎,旨在利用現代圖形硬件的優勢給用戶帶來震撼的視覺效果 [1] 。

WPF的最大優勢,就是它將許多富客戶端的特性集成在同一個平臺上,其中大部分的獨立特性都單獨在其他UI技術中出現過 [2] ,總結下來主要有以下幾點:

1) WPF為開發用戶界面提供一致的技術基礎——XMAL (eXtensible Application Markup Language,可擴展應用程序標記語言),引入類似于HTML中的流式文本布局,從而使外觀界面開發和后臺行為開發分離開來,降低了開發和維護的成本,提高了開發的效率,同樣使得WPF應用程序的全球化和本地化大大簡化。

2) WPF在前后臺數據訪問方面提供了富客戶端中的數據綁定技術,它的任務就是將數據從托管對象復制到控件中,在控件上可以顯示和編輯數據,并且確保將使用控件對數據進行的修改復制回托管對象。這大大簡化了對訪問數據和將數據加載到應用程序托管對象的開發過程。

3) WPF基于Direct X,支持視頻、動畫、2D或3D圖形以及各種類型的文檔,從而可以讓用戶以全新的方式處理信息,使3D進入Web成為可能。

4) WPF為桌面客戶端和瀏覽器客戶端提供了通用基礎,一套編碼,桌面應用程序與Web應用程序均可運用,這大大簡化了二者的應用程序開發工作,節省開發成本。

當然,WPF作為正在處于不斷完善的技術,本身也存在著一些限制條件,最主要的有兩點:

5) WPF屬于.Net Framework 3.0中的組件,如果用戶不支持.Net Framework 3.0,就無法使用WPF,這也是WPF發展和使用的最大阻礙 [2] 。

6) WPF應用程序的性能問題也同樣限制了WPF在企業級程序中的應用。內存消耗過大,嚴重影響WPF應用程序運行效率問題。甚至WPF API本身存在著一些內存泄漏問題。隨著微軟.Net Framework的不斷更新和Windows 7操作系統的推出,相信WPF的內存問題將會逐步被改進。

了解到WPF如此先進的界面開發技術之后,大家必定對如何使用WPF產生濃厚的興趣。對于WPF具體的開發方法,MSDN上有詳細的API介紹,這里不再詳述。接下來,將重點討論在實際開發WPF項目過程中需要注意的一些方面。

2 WPF項目開發中的實際問題

2.1 WPF界面設計文件組織結構的設計和管理

眾所周知,WPF開發的一大特色就是采用XAML語言,使外觀界面開發和后臺行為開發相分離,提高了項目的開發效率和可維護性。但即便后臺C#代碼中創建前臺布局的代碼減少了,大量的前臺代碼如果不加以合理的組織,也會大大降低前臺頁面代碼的易讀性和可維護性。因此管理組織好界面開發的XAML文件,對增加項目的開發效率、易讀性、可維護性、可重用性和可擴展性都是有益的。

經過前人經驗的積累和個人項目經歷的總結,以下幾個方面在部署組織XAML代碼是很值得考慮的:

1) 樣式文件和界面布局文件的分離。這一點廣大的網絡應用程序開發人員都會注意到,這就好比HTML代碼和CSS樣式文件的分離。針對項目對用戶界面的需求,編寫一套用于項目各個組件的界面布局設計文件,專門定義界面中各個控件在組件界面中的分布位置。而界面中各個控件所需的細節樣式,如背景顏色、按鈕樣式等,編寫在其他一些獨立的文件中。布局文件則引入所需的樣式文件,通過不同的鍵值來調用特定的樣式使用。這樣不僅用于顯示布局的XAML文件簡潔易讀,容易理解,而且存儲在獨立XAML文件中的各個樣式也可以被多個XAML文件重復調用,增加了開發效率和重用性。

2) 樣式文件的分類存放。WPF幾乎所有控件都可以定義樣式,比如顏色(Brush)、按鈕(Button)和列表(ListBox)等。在使用獨立文件存儲樣式的基礎上,按樣式描述的控件類型分類存儲各種樣式可以方便開發人員在查詢、修改,甚至添加某個樣式,大大增加了軟件的可維護性。

3) 建立一個XAML資源文件用于在應用程序啟動時統一引入所有資源供應用程序使用,而不是在每個XAML文件中引入所需樣式文件,這樣不僅減少項目的內存利用率,而且這個統一的XAML資源文件好像皮膚文件一個,引入不同的樣式文件可以呈現不同的界面效果。當遇到多個需求類似的項目時,只需為不同的項目量身訂做不同的界面效果,同一組件的布局文件可以保持不變,大大加強了項目的多樣性和可重用性。同時這個統一的資源文件還可以用于引入諸如圖片、聲音,甚至用于數據綁定的轉換器資源等,進一步的增加項目的重用性。

4) 在編寫項目各個組件的布局文件時,對可能被其他組件重用、甚至其他項目重用的某些控件集,盡量獨立設計一個自定義的控件。比如一個文本輸入框和按鈕組成的用于搜索的控件集,可以單獨設計為一個自定義控件供項目中的其他功能組件使用。通常被重用的自定義控件可以稱為公共組件(Common Component)。在整個項目中單獨建立一個定義和實現公共組件的子項目,可以增加項目本身的可重用性,為企業創建和積累良好的代碼資源庫。

5) 創建獨立的XAML文件用于存儲界面上所要顯示的所有字符信息。這一點不僅有利于字符串資源的管理和維護,而且在軟件業逐漸國際化的背景下,有利于軟件本身的本地化和全球化。

當然,如何設計、管理好WPF中的界面設計文件,必須結合多方面的因素(如 項目功能需求、性能要求和項目規模等)考慮。比如在創建自定義窗體時,由于大多數用到的控件(背景顏色、最大/最小化按鈕等)都只能用于自定義窗體的樣式定義中,而且不同的項目可能使用不同的窗體樣式,因此可以考慮不用將各類樣式細分到相對類型的樣式文件中,而采用放置于一個同一文件中統一管理,有可能更便于日后維護。因此,以上建議僅適用于大多數WPF項目的開發,開發人員還需謹慎選擇應用。

2.2 WPF應用程序的性能

要完美實現WPF的強大功能,就需要強大的硬件支持,這不僅包括顯卡對于圖像呈現的幫助,還包括CPU和內存對于WPF界面控件加載和前后臺數據信息交換的處理。采用WPF編寫的Windows應用程序往往都存在著性能低下的問題,而且規模越大,性能問題越發明顯,從而也制約了WPF在企業級Windows應用程序中的普及。

優化WPF應用程序性能,除了可以通過常規的改進后臺程序中算法和設計模式來提高性能以外,還可以改進WPF應用程序前臺XAML代碼的開發。在開發XAML代碼的過程中有太多細節需要開發人員注意,這里就不一一闡述,僅介紹幾個主要原則:

1) 注意資源的共享,盡量避免相同資源的重復導入。這個是有關資源文件部署引入的問題,如前章所講,如果創建單獨的樣式文件,并在項目系統級統一導入所有資源文件,而非每個組件各自導入所需資源文件,這樣除了提高資源共享率以外,還可以大大提高應用程序的性能。

2) 根據功能需求,選擇合適的控件,避免不必要的功能資源浪費,減少加載控件的性能成本。

舉例來說,WPF主要提供三種繪制文本的控件:Label、TextBlock和FlowDocument。通常,當需要支持有限的文本(例如用戶界面 (UI) 中的簡短語句)時,應使用 TextBlock元素。當只需要支持最少的文本時,可以使用 Label。FlowDocument元素是支持內容豐富表示的可重流動文檔的容器,因此,使用該元素時對性能的影響大于使用TextBlock或Label控件時對性能的影響[3] 。

3) 合理利用控件中的屬性設置,在不影響用戶需求的前提下,禁用一些性能成本消耗大的功能和效果,或啟用WPF本身提供的優化性能的機制,達到提高性能的目的。

比如在利用ListBox加載顯示大量數據時,由于標準布局系統會為每個與列表控件關聯的項創建一個布局容器,并計算其布局大小和位置,因此如果一次性加載列表中的所有數據項就會導致性能問題。WPF支持用戶界面的虛擬化,這就使得項容器的生成和關聯布局的計算推遲到項在界面上可見時進行,提高了性能。用戶可以通過對設置VirtualizingStackPanel.IsVirtualizing屬性控制界面虛擬化的開關,不僅如此,用戶還可以VirtualizingStackPanel.VirtualizationMode屬性來回收不在界面視圖之內的項的項容器,進一步優化界面虛擬化功能來提高性能。[3]

4) 注意程序中的內存管理,避免不必要的內存泄漏。由于WPF利用CLR提供的托管代碼管理內存,以提高開發效率和可靠性,但是這是要以犧牲性能作為代價的,甚至往往有些內存不能及時的釋放,最后甚至造成內存泄漏。

WPF本身存在在一些可能造成內存泄漏的功能,開發人員在使用這些功能時,如果不合理管理內存的使用,往往就會給程序帶來不必要的內存泄漏。比如使用事件處理機制的情況下,在控件A代碼中添加了一個針對控件B的事件,并對相應的事件在控件A代碼中定義了一個事件處理器,

B.SomeEvent += new EventHandler(A.SomeMethod)

當完成對A的操作之后釋放A所占用的內存空間時,如B仍然存在,那么A所占用的內存也是無法被釋放的,這就造成了內存泄漏。因此在開發時須注意,當對A的所有操作完成之后,要移除定義在B上某事件上的事件處理器,

B.SomeEvent += new EventHandler(A.SomeMethod)

這樣才能徹底的讓CLR釋放A所占用的內存資源,避免內存泄漏。[4]在WPF的開發中存在很多這樣類似的應該注意內存泄漏問題的情形,具體的可以參閱參考文獻4的文章中所介紹的各類情形。

5) 設計開發時,避免性能成本大的控件一起使用,導致程序性能下降。比如由于位圖效果非常消耗CPU,因此不得將位圖效果應用于大型可視對象或動畫。

6) 對于WPF提供的特殊功能盡量使用WPF提供的相對應的類來實現,因為.Net Framework所提供的一些內置機制已經為WPF的特色功能解決了一些性能問題,直接使用反而比開發人員自己實現要有效的多。這一點尤其體現在數據綁定機制上。WPF中的數據綁定機制,可以綁定普通的CLR對象,并通過實現一些屬性變更通知機制來實現,當然也可以直接綁定WPF提供的DependencyObject的DependencyProperty上,在性能比較上,后者要優于前者。

如何優化WPF應用程序的性能還需注意很多細節的地方,具體的做法可以閱讀參考文獻3中的相關文章。開發人員也可以使用一些性能分析工具來測試WPF應用程序中各組件的資源占有情況,從而便于集中精力解決資源消耗大的部分。最常用的就是WPF提供的XamlPad(用于查看XAML文檔結構)和WpfPerf(用于WPF 性能檢查)中的可視化探查器(Visual Profiler,用于 WPF 服務如布局和事件處理的使用情況)[5]。其余具體的工具介紹和使用方法可以瀏覽參考文獻5中所涵蓋的資料。

3 總結

綜上所述,作為新一代Windows應用程序界面開發技術,WPF無論從開發模式還是界面呈現效果上,都是界面開發技術上的一次革命。這場技術革命,即給開發人員帶來了如流式文本開發模式和數據綁定功能這樣的驚喜,也在技術選擇和開發上提出了諸如性能問題這樣的挑戰。總的來說,對于開發WPF應用程序來說,只有在了解項目需求,根據WPF提供的UI控件的特性設計合理的界面之后,要充分運用XAML技術來實現界面設計和后臺邏輯行為的分離,利用數據綁定帶來的方便,并時時刻刻控制內存的使用,注意程序性能,才能為成功完成WPF項目打下堅實的基礎。

參考文獻:

[1] 美國微軟公司MSDN.Windows Presentation Foundation 簡介[EB/OL].http://msdn.microsoft.com/zh-cn/library/aa970268.aspx.

[2] Ian Griffiths,趙劼譯.把WPF作為一種富客戶端技術[EB/OL].http://www.infoq.com/cn/articles/wpf-rich-client-java.

[3] 美國微軟公司MSDN.優化WPF應用程序性能[EB/OL].http://msdn.microsoft.com/zh-cn/library/bb613560.aspx.

[4] Jgoldb.Finding Memory Leaks in WPF-based applications[EB/OL]. http://blogs.msdn.com/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx.

[5] Adam Nathan with Daniel Lehenbauer,Windows Presentation Foundation Unleashed[M].SAMS,2006(12):618-620.

主站蜘蛛池模板: 亚洲中文字幕在线一区播放| 一级毛片在线直接观看| 亚洲va在线观看| 国产SUV精品一区二区| 亚洲不卡影院| 久久精品免费看一| 国产在线91在线电影| 久久夜色精品国产嚕嚕亚洲av| 一本久道久综合久久鬼色| 亚洲aaa视频| 天天干伊人| a级毛片免费网站| 第一区免费在线观看| 国产日产欧美精品| 呦系列视频一区二区三区| 国产91在线|日本| 麻豆精品在线| 亚洲欧美综合另类图片小说区| 91在线中文| www亚洲天堂| 国产精品所毛片视频| 国产一区三区二区中文在线| аⅴ资源中文在线天堂| 国产毛片久久国产| 制服丝袜一区| 日韩欧美成人高清在线观看| 国产在线小视频| 亚洲成人黄色在线| 日本高清在线看免费观看| 风韵丰满熟妇啪啪区老熟熟女| 欧美97欧美综合色伦图 | 国产色婷婷| 国产一在线| 蜜桃视频一区二区| 国产免费精彩视频| 九色91在线视频| 日日拍夜夜操| 国产成人高清亚洲一区久久| 亚洲成aⅴ人在线观看| 一区二区三区高清视频国产女人| 成人精品免费视频| 在线观看国产精品第一区免费| 狠狠色丁香婷婷综合| 国产JIZzJIzz视频全部免费| 国产一线在线| 欧美日韩一区二区在线播放| 国内精品伊人久久久久7777人| 色偷偷一区二区三区| 精品自窥自偷在线看| 亚洲aⅴ天堂| 日本人真淫视频一区二区三区| 久草性视频| 免费人成黄页在线观看国产| 人人91人人澡人人妻人人爽| 日韩专区第一页| 91久久国产热精品免费| 国产精品视频免费网站| 国产在线小视频| 久久精品中文字幕免费| 国产亚洲欧美日韩在线一区二区三区| 91毛片网| 色135综合网| 99re在线视频观看| 凹凸国产熟女精品视频| 十八禁美女裸体网站| 国产在线一二三区| 免费看的一级毛片| 国产又粗又爽视频| 全午夜免费一级毛片| 尤物特级无码毛片免费| 日韩精品无码不卡无码| 国产精品久久久免费视频| 国产乱论视频| 久久久波多野结衣av一区二区| 九九免费观看全部免费视频| 国产无人区一区二区三区| 国产成人亚洲精品无码电影| 97人人做人人爽香蕉精品| 亚洲热线99精品视频| 九色国产在线| 亚洲欧美成人在线视频| 国产精品不卡片视频免费观看|