這篇博客將介紹WPF中的虛擬化技術(shù)。
1. Data Virtualization 通常情況下我們說數(shù)據(jù)虛擬化是指數(shù)據(jù)源沒有完全加載,僅加載當(dāng)前需要顯示的數(shù)據(jù)呈現(xiàn)給用戶。這種場景會讓我們想到數(shù)據(jù)分頁顯示,當(dāng)需要特定頁面的數(shù)據(jù)時(shí),根據(jù)頁數(shù)請求相應(yīng)數(shù)據(jù)。
WPF沒有提供對Data Virtualization原生態(tài)的支持,當(dāng)時(shí)我們可以使用Paging相關(guān)技術(shù)來實(shí)現(xiàn)。在我先前的博客WPF 實(shí)現(xiàn) DataGrid/ListView 分頁控件中有介紹。
2. UI Virtualization 是針對數(shù)據(jù)容器渲染數(shù)據(jù)項(xiàng)的一個(gè)優(yōu)化。舉個(gè)例子,一個(gè)ListView/ListBox控件中有10000個(gè)Item,但是可見的只有10個(gè),那么此時(shí)只渲染并顯示這10個(gè)Item,剩余的9990個(gè)Item不實(shí)例化和顯示。這樣可以提高程序的性能。
WPF中VirtualizingStackPanel容器是實(shí)現(xiàn)了UI Virtualization的容器,VirtualizingStackPanel也是ListBox/ListView的默認(rèn)數(shù)據(jù)容器。
下面通過一個(gè)例子來展示開啟UI 虛擬化和關(guān)閉UI 虛擬化對程序性能產(chǎn)生的影響。
<ListView x:Name="VirtualizationListView" VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.IsVirtualizing="True"/>