Megosztás a következőn keresztül:


A teljesítmény optimalizálása: Vezérlők

A Windows Presentation Foundation (WPF) számos gyakori felhasználói felületi (UI) összetevőt tartalmaz, amelyeket a legtöbb Windows-alkalmazás használ. Ez a témakör a felhasználói felület teljesítményének javítására szolgáló technikákat tartalmaz.

Nagyméretű adathalmazok megjelenítése

A WPF-vezérlők, például az ListViewComboBox alkalmazásokban lévő elemek listájának megjelenítésére szolgálnak. Ha a megjelenítendő lista nagy, az alkalmazás teljesítménye csökkenhet. Ennek az az oka, hogy a standard elrendezési rendszer létrehoz egy elrendezéstárolót a listavezérlőhöz társított minden elemhez, és kiszámítja az elrendezés méretét és pozícióját. Általában nem kell egyszerre megjelenítenie az összes elemet; ehelyett megjelenít egy részhalmazt, és a felhasználó végiggörget a listán. Ebben az esetben érdemes felhasználói felületi virtualizálást használni, ami azt jelenti, hogy az elem tárolójának létrehozása és a kapcsolódó elrendezés számítása elhalasztva lesz, amíg az elem nem látható.

A felhasználói felület virtualizálása a listavezérlők fontos eleme. A felhasználói felület virtualizálását nem szabad összekeverni az adatvirtualizálással. A felhasználói felület virtualizálása csak a látható elemeket tárolja a memóriában, de egy adatkötési forgatókönyvben a teljes adatstruktúrát a memóriában tárolja. Ezzel szemben az adatvirtualizálás csak a képernyőn látható adatelemeket tárolja a memóriában.

Alapértelmezés szerint a felhasználói felület virtualizálása engedélyezve van az ListView adatokhoz kötött listaelemeknél és ListBox vezérlőknél. TreeView a virtualizálás VirtualizingStackPanel.IsVirtualizing csatolt tulajdonság true beállításával engedélyezhető. Ha engedélyezni szeretné a felhasználói felület virtualizálását olyan egyéni vezérlőkhöz, amelyek a ItemsControl osztályból származnak vagy olyan meglévő elemvezérlőkhöz, amelyek a StackPanel osztályt használják, mint például a ComboBox, állítsa be az ItemsPanel értéket VirtualizingStackPanel-ra és állítsa be IsVirtualizing-t true-ra. Sajnos ezekhez a vezérlőkhöz letilthatja a felhasználói felület virtualizálását anélkül, hogy észrevenné. Az alábbiakban felsoroljuk azokat a feltételeket, amelyek letiltják a felhasználói felület virtualizálását.

Az elemtárolók virtualizálásakor fontos szempont, hogy rendelkezik-e további állapotinformációkkal az elemhez tartozó elemtárolóhoz. Ebben az esetben mentenie kell az elsődleges állapotot. Előfordulhat például, hogy egy vezérlő tartalmaz Expander egy elemet, és az IsExpanded állapot az elem tárolójára van kötve, és nem magához az elemhez. Amikor a tárolót újra felhasználják egy új elemhez, a rendszer az aktuális értéket IsExpanded használja az új elemhez. Emellett a régi elem elveszíti a megfelelő IsExpanded értéket.

Jelenleg egyetlen WPF-vezérlő sem nyújt beépített támogatást az adatvirtualizáláshoz.

Tároló újrahasznosítása

A .NET-keretrendszer 3.5 SP1-ben hozzáadott felhasználói felületi virtualizálás optimalizálása a ItemsControl öröklő vezérlők esetében, ami szintén javíthatja a görgetési teljesítményt. ItemsControl A felhasználói felület virtualizálását használó elemek feltöltésekor létrehoz egy elemtárolót minden olyan elemhez, amely a nézetbe görget, és megsemmisíti a nézeten kívül görgető elemek elemtárolóját. A tároló-újrahasznosítás lehetővé teszi, hogy a vezérlő újra felhasználja a meglévő elemtárolókat a különböző adatelemekhez, hogy az elemtárolók ne legyenek folyamatosan létrehozva és megsemmisítve a felhasználó görgetése ItemsControlsorán. Választhatja az elemek újrahasznosításának engedélyezését a VirtualizationMode csatolt tulajdonság beállításával Recycling.

Bármely ItemsControl, amely támogatja a virtualizálást, használhatja a konténer újrahasznosítást. Példa a tárolók újrahasznosításának engedélyezésére a ListBoxListBox görgetési teljesítményének javítása című témakörben.

Kétirányú virtualizálás támogatása

VirtualizingStackPanel Beépített támogatást nyújt a felhasználói felületi virtualizáláshoz egy irányban, vízszintesen vagy függőlegesen. Ha kétirányú virtualizálást szeretne használni a vezérlőkhöz, egy egyéni panelt kell implementálnia, amely kibővíti az osztályt VirtualizingStackPanel . Az VirtualizingStackPanel osztály olyan virtuális metódusokat tesz elérhetővé, mint a OnViewportSizeChanged, LineUp, PageUpés MouseWheelUp. Ezek a virtuális módszerek lehetővé teszik a lista látható részének változásának észlelését és megfelelő kezelését.

Sablonok optimalizálása

A vizualizációfa az alkalmazás összes vizuális elemét tartalmazza. A közvetlenül létrehozott objektumok mellett a sablonbővítés miatt is tartalmaz objektumokat. Például, amikor létrehoz egy Button, akkor kap ClassicBorderDecorator és ContentPresenter objektumokat a vizuális fában. Ha még nem optimalizálta a vezérlősablonokat, előfordulhat, hogy sok felesleges objektumot hoz létre a vizualizációfán. A vizualizációfáról további információt a WPF grafikus megjelenítési áttekintésében talál.

Halasztott görgetés

Alapértelmezés szerint, amikor a felhasználó egy görgetősávra húzza az ujját, a tartalomnézet folyamatosan frissül. Ha a görgetés lassú a vezérlőben, fontolja meg a késleltetett görgetést. Halasztott görgetés esetén a tartalom csak akkor frissül, ha a felhasználó felengedi a hüvelykujját.

Halasztott görgetés implementálásához állítsa a IsDeferredScrollingEnabled tulajdonságot a következőre true. IsDeferredScrollingEnabled egy csatolt tulajdonság, amely beállítható a ScrollViewer-en és bármelyik vezérlőelemen, amely rendelkezik ScrollViewer-vel a vezérlősablonjában.

Teljesítményfunkciót megvalósító vezérlők

Az alábbi táblázat az adatok megjelenítésére és a teljesítményfunkciók támogatására szolgáló gyakori vezérlőket sorolja fel. A funkciók engedélyezéséről az előző szakaszokban olvashat.

Vezérlő Virtualizálás Tároló újrahasznosítása Halasztott görgetés
ComboBox Engedélyezhető Engedélyezhető Engedélyezhető
ContextMenu Engedélyezhető Engedélyezhető Engedélyezhető
DocumentViewer Nem elérhető Nem elérhető Engedélyezhető
ListBox Alapértelmezett Engedélyezhető Engedélyezhető
ListView Alapértelmezett Engedélyezhető Engedélyezhető
TreeView Engedélyezhető Engedélyezhető Engedélyezhető
ToolBar Nem elérhető Nem elérhető Engedélyezhető

Megjegyzés:

Példa a virtualizálás és a tároló-újrahasznosítás engedélyezésére a TreeViewTreeView teljesítményének javítása című témakörben.

Lásd még