Sdílet prostřednictvím


Optimalizace výkonu: Ovládací prvky

Windows Presentation Foundation (WPF) obsahuje řadu běžných komponent uživatelského rozhraní, které se používají ve většině aplikací systému Windows. Toto téma obsahuje techniky pro zlepšení výkonu uživatelského rozhraní.

Zobrazení velkých datových sad

Ovládací prvky WPF, jako jsou ListView a ComboBox, slouží k zobrazení seznamů položek v aplikaci. Pokud je seznam, který se má zobrazit, velký, může být ovlivněn výkon aplikace. Důvodem je to, že standardní systém rozložení vytvoří kontejner rozložení pro každou položku přidruženou k ovládacímu prvku seznam a vypočítá jeho velikost a pozici rozložení. Obvykle nemusíte zobrazovat všechny položky najednou; místo toho zobrazíte podmnožinu a uživatel se v seznamu posune. V tomto případě je vhodné použít virtualizaci uživatelského rozhraní, což znamená, že generování kontejneru položek a související výpočty rozložení pro položku se odloží, dokud se položka nezobrazí.

Virtualizace uživatelského rozhraní je důležitým aspektem ovládacích prvků seznamu. Virtualizace uživatelského rozhraní by se neměla zaměňovat s virtualizací dat. Virtualizace uživatelského rozhraní ukládá jenom viditelné položky do paměti, ale ve scénáři datové vazby ukládá celou datovou strukturu do paměti. Naproti tomu virtualizace dat ukládá pouze datové položky, které jsou viditelné na obrazovce v paměti.

Ve výchozím nastavení je virtualizace uživatelského rozhraní povolena pro ovládací prvky ListView a ListBox, když jsou jejich položky seznamu svázány s daty. TreeView virtualizaci lze povolit nastavením připojené vlastnosti VirtualizingStackPanel.IsVirtualizing na true. Pokud chcete povolit virtualizaci uživatelského rozhraní pro vlastní ovládací prvky odvozené z ItemsControl nebo existující ovládací prvky položek, které používají třídu StackPanel, například ComboBox, můžete nastavit ItemsPanel na VirtualizingStackPanel a IsVirtualizing na true. Virtualizaci uživatelského rozhraní pro tyto ovládací prvky bohužel můžete zakázat, aniž byste si ji uvědomili. Následuje seznam podmínek, které zakazují virtualizaci uživatelského rozhraní.

Důležitým aspektem při virtualizaci kontejnerů položek je to, jestli máte k kontejneru položek přidružené další informace o stavu, které patří k položce. V tomto případě je nutné uložit další stav. Můžete mít například položku obsaženou v ovládacím Expander prvku a IsExpanded stav je vázán na kontejner položky, a ne na samotnou položku. Při opětovném použití kontejneru pro novou položku se pro novou položku použije aktuální hodnota IsExpanded . Stará položka navíc ztratí správnou IsExpanded hodnotu.

V současné době žádné ovládací prvky WPF nenabízí integrovanou podporu virtualizace dat.

Recyklace kontejnerů

Optimalizace virtualizace uživatelského rozhraní přidaná v rozhraní .NET Framework 3.5 SP1 pro ovládací prvky, které dědí z ItemsControl, je recyklace kontejnerů, což může rovněž zlepšit výkon při posouvání. ItemsControl Když se naplní virtualizace uživatelského rozhraní, vytvoří kontejner položek pro každou položku, která se posune do zobrazení, a zničí kontejner položek pro každou položku, která se posune mimo zobrazení. Recyklace kontejneru umožňuje ovládacímu prvku opakovaně používat existující kontejnery položek pro různé datové položky, aby kontejnery položek nebyly neustále vytvořeny a zničeny při posouvání ItemsControluživatelem . Recyklaci položek můžete povolit nastavením hodnoty vlastnosti VirtualizationMode na Recycling.

Všechny ItemsControl , které podporují virtualizaci, můžou používat recyklaci kontejnerů. Příklad, jak povolit recyklaci kontejnerů na ListBox, naleznete v tématu Zlepšení výkonu posouvání seznamu.

Podpora obousměrné virtualizace

VirtualizingStackPanel nabízí integrovanou podporu virtualizace uživatelského rozhraní v jednom směru, a to vodorovně nebo svisle. Pokud chcete pro ovládací prvky použít obousměrnou virtualizaci, musíte implementovat vlastní panel, který rozšiřuje VirtualizingStackPanel třídu. Třída VirtualizingStackPanel zveřejňuje virtuální metody, jako OnViewportSizeChangedje , LineUp, PageUpa MouseWheelUp. Tyto virtuální metody umožňují zjistit změnu ve viditelné části seznamu a odpovídajícím způsobem ji zpracovat.

Optimalizace šablon

Strom vizuálu obsahuje všechny vizuální prvky v aplikaci. Kromě přímo vytvořených objektů obsahuje také objekty z důvodu rozšíření šablony. Například když vytvoříte Button, získáte objekty ClassicBorderDecorator a ContentPresenter ve vizuálním stromu. Pokud jste neoptimalizovali šablony ovládacích prvků, možná ve vizuálním stromu vytváříte spoustu nadbytečných objektů. Další informace o vizuálním stromu naleznete v tématu Přehled vykreslování grafiky WPF.

Odložené posouvání

Když uživatel přetáhne palec na posuvníku, zobrazení obsahu se ve výchozím nastavení průběžně aktualizuje. Pokud je posouvání ve vašem ovládacím prvku pomalé, zvažte použití odloženého posouvání. Při odložené posouvání se obsah aktualizuje jenom v případě, že uživatel uvolní palec.

Pokud chcete implementovat odložené posouvání, nastavte vlastnost IsDeferredScrollingEnabled na hodnotu true. IsDeferredScrollingEnabled je připojená vlastnost a lze ji nastavit na ScrollViewer a na jakýkoli ovládací prvek, který má ScrollViewer ve své šabloně ovládacího prvku.

Ovládací prvky, které implementují funkce výkonu

Následující tabulka uvádí společné ovládací prvky pro zobrazení dat a jejich podporu funkcí výkonu. Informace o tom, jak tyto funkce povolit, najdete v předchozích částech.

Řízení Virtualizace Recyklace kontejnerů Odložené posouvání
ComboBox Je možné povolit Je možné povolit Je možné povolit
ContextMenu Je možné povolit Je možné povolit Je možné povolit
DocumentViewer Není k dispozici Není k dispozici Je možné povolit
ListBox Výchozí Je možné povolit Je možné povolit
ListView Výchozí Je možné povolit Je možné povolit
TreeView Je možné povolit Je možné povolit Je možné povolit
ToolBar Není k dispozici Není k dispozici Je možné povolit

Poznámka:

Příklad povolení virtualizace a recyklace kontejnerů na objektu TreeView, naleznete v tématu Zlepšení výkonu TreeView.

Viz také