Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í.
Kontejnery položek jsou přidány přímo do objektu ItemsControl. Pokud například aplikace explicitně přidá ListBoxItem objekty do ListBox, ListBox nevirtualizuje ListBoxItem objekty.
Kontejnery položek v ItemsControl jsou různých typů. Například Menu, který používá Separator objekty, nemůže implementovat recyklaci položek, protože Menu obsahuje objekty typu Separator a MenuItem.
Nastavení CanContentScroll na
false.Nastavení IsVirtualizing na
false.
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é
.NET Desktop feedback