使用虛擬化 list或grid

2021-08-15 07:33:23 字數 3508 閱讀 5951

許多應用程式顯示和處理資料集合,如搜尋結果列表或者**。集合非常大時,顯示或操作集合時效能可能會降低。為了提高大資料集的效能,你可以使用虛擬化。itemscontrol支援ui和資料虛擬化。

注意:itemscontrol

是幾個常見集合控制項的基類,包括

listview

,gridview

,flipview

,listbox

和combobox

控制項。這些示例使用

listview

和gridview

控制項,但是這些資訊通常適用於

itemscontrol

將專案新增到

itemscontrol時

,該專案被包裝在專案容器中。

例如,新增到

listview

的專案被包裝在乙個

listviewitem中

。如果沒有ui虛擬化,整個資料集將儲存在記憶體中,並且還會為資料集中的每個專案建立乙個專案容器。

乙個listview控制項

是繫結到的1000個專案的集合也將創造1000個

listviewitem的

儲存在記憶體容器。

使用ui虛擬化時,資料集仍保留在記憶體中,但只有在專案已準備好在ui中顯示時才會建立專案容器。

使用ui虛擬化

的listview

可能只在記憶體中

保留20個

listviewitem

物件。當使用者滾動列表時,

它根據需要

建立或重新使用

listviewitem。(

listviewitem

物件的數量

取決於ui中顯示的專案數量。)預設情況下,

itemscontrol

和派生自其的標準控制項支援ui虛擬化。

但在某些情況下,ui虛擬化被禁用。

我們現在看看這些情況,以便您可以在應用程式設計中做出明智的決定。

在討論虛擬化時,理解視口的概念或者

顯示內容

的itemscontrol

的區域是很重要的

。您還需要了解父容器如何影響控制項視口的大小。

一些容器限制了他們的孩子的大小。

在這裡,我們將乙個

gridview

放置在乙個

grid中

。gridview

的視口僅限於父

grid

的大小。

使用者可以使用滾動條將隱藏的專案滾動到檢視中。

xaml

複製

height="400"

width="600">

background="darkgreen"

itemssource=""/>

grid>

其他容器讓他們的孩子使用無限的空間來顯示他們的內容,即使這個空間超出了容器的可見邊界。

在這裡,我們把同乙個

gridview

放置在乙個

canvas中。畫布

的可見邊界

以藍色顯示。

gridview

的視口會增長以適應其所有專案,並延伸到容器的可見邊界之外。

(這個影象中灰色的專案在實際的應用程式中是不可見的。)沒有滾動條,所以使用者不能將隱藏的專案滾動到檢視中。

xaml

複製

height="400"

width="600">

background="darkgreen"

itemssource=""/>

canvas>

itemscontrol

的視口的大小

不受限制時,控制項不執行虛擬化。

而是為其集合中的每個專案建立乙個專案容器。

一些不限制視口大小的通用容器是

canvas

,stackpanel

和scrollviewer

。您可以通過

直接設定

itemscontrol

的大小來啟用虛擬化

,而不是通過其父容器進行大小設定。

在這裡,我們

在gridview上設定

高度和寬度。

這將限制視口的大小,並且視口外的專案被虛擬化。

xaml

複製

background="darkgreen"

itemssource=""

height="400"

width="600"/>

canvas>

乙個

itemscontrol

使用它的

itemspanel

來確定如何在ui中排列專案。

您的應用程式設計可能需要您更改預設

itemspanel

為另乙個。

如果新面板支援ui虛擬化,則控制項將繼續像以前一樣執行虛擬化。

標準虛擬化面板包括

wrapgrid

和virtualizingstackpanel。

如果使用非虛擬化面板(如

variablesizedwrapgrid

或stackpanel)

替換itemscontrol中

的預設面板,

則該控制項的ui虛擬化將被禁用。

分組資料不支援ui虛擬化。

有關分組資料的更多資訊,請參閱分組。

如果您需要通過大量分組資料提供快速導航,請考慮使用

semanticzoom

控制項。有關更多資訊,請參閱

。使用ui虛擬化,完整的資料集儲存在記憶體中。

有時,你的資料集非常大,不能或不應該一次儲存在記憶體中。

在這種情況下,您可以使用資料虛擬化來獲取資料的乙個子集。

該itemscontrol中

仍然可以申請ui虛擬化的資料虛擬化建立的資料子集。

隨機訪問資料虛擬化讓您可以從完整的資料集中的任何位置檢索資料的乙個子集。

例如,如果

listview

滾動條的滾動指示器或拇指的大小始終是用來表示其在完整100,000項資料集中的位置。

要使用隨機訪問資料虛擬化,您必須使用實現

inotifycollectionchanged

和iobservablevector

的資料來源

。例如,如果

listview

滾動條的大小可以用來表示它在最初的50個專案資料集中的位置。

調整滾動條的大小以表示其在更新的100專案資料集中的位置。

要使用增量資料虛擬化,您必須使用實現

isupportincrementalloading

的資料來源

。當您將增量資料虛擬化與

listview

或gridview一起使用時

,可以使用這些成員來控制資料載入:

datafetchsize

,incrementalloadingthreshold

,incrementalloadingtrigger

,loadmoreitemsasync。

VMware虛擬化 安裝使用ESXI

vsphere 的兩個核心元件是 vmware esxi和 vmware vcenter server。esxi 是用於建立和執行虛擬機器及虛擬裝置的虛擬化平台。vcenter server 是一種服務,充當連線到網路的 esxi 主機的中心管理員。vcenter server可用於將多個主機的資源...

自動化測試專案 list的使用

erase 方法是刪除iterator指定的節點 但是要注意的是在執行完此函式的時候iterator也被銷毀了 這樣的話關於iterator的操作就會報錯 以下是關於erase 方法的正確使用 正確使用方法1 std list int list std list int iterator itlis...

使用桌面虛擬化實現「監控雲」

虛擬桌面已經在各個不同的場景得以應用,今天我們介紹的主要場景是監控室,機場航班資訊的大螢幕應用。有圖有真相,先看下圖 其實畫面裡大大小小的螢幕,後台其實是乙個或多個虛擬桌面組成的。很多監控室有幾十個以上的螢幕,來組成整幅的螢幕牆,孰不知,在沒有虛擬桌面的時候,螢幕後面要擺幾十台pc機才能完成。現在使...