Performansı iyileştirme: Denetimler
Windows Presentation Foundation (WPF), çoğu Windows uygulamasında kullanılan birçok ortak kullanıcı arabirimi (UI) bileşenini içerir. Bu konu, kullanıcı arabiriminizin performansını geliştirmeye yönelik teknikler içerir.
Büyük veri kümelerini görüntüleme
gibi ListViewComboBox WPF denetimleri, bir uygulamadaki öğe listelerini görüntülemek için kullanılır. Görüntülenecek liste büyükse uygulamanın performansı etkilenebilir. Bunun nedeni, standart düzen sisteminin liste denetimiyle ilişkili her öğe için bir düzen kapsayıcısı oluşturması ve düzen boyutunu ve konumunu hesaplamasıdır. Genellikle, tüm öğeleri aynı anda görüntülemeniz gerekmez; bunun yerine bir alt küme görüntülersiniz ve kullanıcı listeyi kaydırır. Bu durumda, kullanıcı arabirimi sanallaştırmasını kullanmak mantıklıdır; bu, bir öğe için öğe kapsayıcı oluşturma ve ilişkili düzen hesaplamasının öğe görünene kadar ertelenmesi anlamına gelir.
UI Sanallaştırma, liste denetimlerinin önemli bir yönüdür. Kullanıcı arabirimi sanallaştırma, veri sanallaştırma ile karıştırılmamalıdır. UI sanallaştırması yalnızca görünür öğeleri bellekte depolar, ancak veri bağlama senaryosunda veri yapısının tamamını bellekte depolar. Buna karşılık, veri sanallaştırma yalnızca ekranda görünen veri öğelerini bellekte depolar.
Varsayılan olarak, liste öğeleri verilere bağlandığında ve ListBox denetimleri için ListView kullanıcı arabirimi sanallaştırma etkinleştirilir. TreeViewsanallaştırma, ekli özellik true
olarak ayarlanarak VirtualizingStackPanel.IsVirtualizing etkinleştirilebilir. kullanıcı arabirimi sanallaştırmasını, sınıfından ItemsControl türetilen özel denetimler veya gibi ComboBoxsınıfını kullanan StackPanel mevcut öğe denetimleri için etkinleştirmek istiyorsanız ve olarak ayarlayabilirsiniz true
ItemsPanelVirtualizingStackPanelIsVirtualizing. Ne yazık ki, bu denetimler için ui sanallaştırmasını farkında olmadan devre dışı bırakabilirsiniz. Aşağıda, kullanıcı arabirimi sanallaştırmasını devre dışı bırakmaya ilişkin koşulların listesi yer alır.
Öğe kapsayıcıları doğrudan öğesine ItemsControleklenir. Örneğin, bir uygulama açıkça bir ListBoxListBoxnesnesine nesneleri eklerseListBoxItem, nesneleri sanallaştırmazListBoxItem.
içindeki ItemsControl öğe kapsayıcıları farklı türlerdedir. Örneğin, ve türünde MenuItemSeparator nesneler içerdiğinden Menu nesneleri kullanan Separator bir Menu öğe geri dönüştürme uygulayamaz.
ayarı olarak
false
ayarlanırCanContentScroll.ayarı olarak
false
ayarlanırIsVirtualizing.
Öğe kapsayıcılarını sanallaştırırken dikkat edilmesi gereken önemli noktalardan biri, öğeye ait bir öğe kapsayıcısıyla ilişkilendirilmiş ek durum bilgileriniz olup olmadığıdır. Bu durumda, ek durumu kaydetmeniz gerekir. Örneğin, denetimde bulunan bir Expander öğeniz olabilir ve IsExpanded durum öğenin kendisine değil öğenin kapsayıcısına bağlıdır. Kapsayıcı yeni bir öğe için yeniden kullanıldığında, geçerli değeri IsExpanded yeni öğe için kullanılır. Buna ek olarak, eski öğe doğru IsExpanded değeri kaybeder.
Şu anda hiçbir WPF denetimi, veri sanallaştırma için yerleşik destek sunmaz.
Kapsayıcı geri dönüşümü
.NET Framework 3.5 SP1'de devralınan ItemsControl denetimler için eklenen ui sanallaştırmasına yönelik iyileştirme kapsayıcı geri dönüşümüdür ve bu da kaydırma performansını iyileştirebilir. Ui sanallaştırma kullanan bir ItemsControl doldurulduğunda, görünüme kayan her öğe için bir öğe kapsayıcısı oluşturur ve görünüm dışına kayan her öğe için öğe kapsayıcısını yok eder. Kapsayıcı geri dönüşümü , denetimin mevcut öğe kapsayıcılarını farklı veri öğeleri için yeniden kullanmasına olanak tanır, böylece kullanıcı kaydırdıkça öğe kapsayıcıları ItemsControlsürekli oluşturulmaz ve yok olmaz. Ekli özelliği Recyclingolarak ayarlayarak öğe geri dönüşümünü etkinleştirmeyi VirtualizationMode seçebilirsiniz.
Sanallaştırmayı destekleyenler ItemsControl kapsayıcı geri dönüşümlerini kullanabilir. üzerinde kapsayıcı geri dönüşümünün ListBoxnasıl etkinleştirileceğine ilişkin bir örnek için bkz . ListBox'ın Kaydırma Performansını Geliştirme.
Çift yönlü sanallaştırmayı destekleme
VirtualizingStackPanel , kullanıcı arabirimi sanallaştırması için yatay veya dikey olarak tek yönde yerleşik destek sunar. Denetimleriniz için çift yönlü sanallaştırma kullanmak istiyorsanız sınıfını genişleten VirtualizingStackPanel özel bir panel uygulamanız gerekir. VirtualizingStackPanel sınıfı , , LineUpPageUpve MouseWheelUpgibi OnViewportSizeChangedsanal yöntemleri kullanıma sunar. Bu sanal yöntemler, listenin görünür bölümündeki bir değişikliği algılamanızı ve buna göre işlemenizi sağlar.
Şablonları iyileştirme
Görsel ağaç, bir uygulamadaki tüm görsel öğeleri içerir. Doğrudan oluşturulan nesnelere ek olarak, şablon genişletme nedeniyle nesneleri de içerir. Örneğin, bir Buttonoluşturduğunuzda görsel ağaçta ve ContentPresenter nesnelerini de alırsınızClassicBorderDecorator. Denetim şablonlarınızı iyileştirmediyseniz görsel ağaçta çok fazla gereksiz nesne oluşturmuş olabilirsiniz. Görsel ağaç hakkında daha fazla bilgi için bkz . WPF Grafik İşlemeye Genel Bakış.
Ertelenen kaydırma
Varsayılan olarak, kullanıcı parmağı kaydırma çubuğuna sürüklediğinde içerik görünümü sürekli olarak güncelleştirilir. Denetiminizde kaydırma yavaşsa, ertelenen kaydırmayı kullanmayı göz önünde bulundurun. Ertelenmiş kaydırmada içerik yalnızca kullanıcı başparmak serbest bıraktığında güncelleştirilir.
Ertelenen kaydırmayı uygulamak için özelliğini olarak true
ayarlayınIsDeferredScrollingEnabled. IsDeferredScrollingEnabled ekli bir özelliktir ve üzerinde ScrollViewer ve denetim şablonunda bir denetimi olan herhangi bir ScrollViewer denetimde ayarlanabilir.
Performans özellikleri uygulayan denetimler
Aşağıdaki tabloda verileri görüntülemeye yönelik yaygın denetimler ve performans özellikleri desteği listelenmektedir. Bu özellikleri etkinleştirme hakkında bilgi için önceki bölümlere bakın.
Control | Sanallaştırma | Kapsayıcı geri dönüşümü | Ertelenen kaydırma |
---|---|---|---|
ComboBox | Etkinleştirilebilir | Etkinleştirilebilir | Etkinleştirilebilir |
ContextMenu | Etkinleştirilebilir | Etkinleştirilebilir | Etkinleştirilebilir |
DocumentViewer | Yok | Yok | Etkinleştirilebilir |
ListBox | Varsayılan | Etkinleştirilebilir | Etkinleştirilebilir |
ListView | Varsayılan | Etkinleştirilebilir | Etkinleştirilebilir |
TreeView | Etkinleştirilebilir | Etkinleştirilebilir | Etkinleştirilebilir |
ToolBar | Yok | Yok | Etkinleştirilebilir |
Dekont
üzerinde sanallaştırmayı ve kapsayıcı geri dönüşümünün TreeViewnasıl etkinleştirileceğine ilişkin bir örnek için bkz . TreeView'un Performansını Geliştirme.
Ayrıca bkz.
.NET Desktop feedback