Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
ListView ve ComboBox gibi 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ı arabirimini sanallaştırmakullanmak mantıklıdır; başka bir deyişle, öğe kapsayıcısı oluşturma ve öğe görünene kadar öğe için ilişkili düzen hesaplaması ertelenebilir.
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, ListView ve ListBox denetimleri için kullanıcı arabirimi sanallaştırması etkinleştirilir.
TreeView sanallaştırma, ekli VirtualizingStackPanel.IsVirtualizing özelliği trueolarak ayarlanarak etkinleştirilebilir.
ItemsControlgibi StackPanel sınıfını kullanan ComboBox veya var olan öğe denetimlerinden türetilen özel denetimler için UI sanallaştırmayı etkinleştirmek istiyorsanız, ItemsPanelVirtualizingStackPanel olarak ayarlayabilir ve IsVirtualizingtrueolarak ayarlayabilirsiniz. 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 ItemsControl'a eklenmiştir. Örneğin, bir uygulama açıkça ListBoxItem nesneleri bir ListBoxeklerse, ListBoxListBoxItem nesneleri sanallaştırmaz.
ItemsControl öğe kapsayıcıları farklı türlerdedir. Örneğin, Menu nesneleri kullanan bir Separator, MenuSeparator ve MenuItemtüründe nesneler içerdiğinden öğe geri dönüşümü uygulayamaz.
CanContentScroll,
falseolarak ayarlama.IsVirtualizing,
falseolarak ayarlama.
Öğ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, bir öğeniz Expander denetiminde bulunabilir ancak IsExpanded durumu, öğenin kendisine değil, öğenin kapsayıcısına bağlıdır. Kapsayıcı yeni bir öğe için yeniden kullanıldığında, yeni öğe için geçerli IsExpanded değeri kullanılır. Ayrıca, eski öğe doğru IsExpanded değerini kaybeder.
Şu anda hiçbir WPF denetimi, veri sanallaştırma için yerleşik destek sunmaz.
Kapsayıcı geri dönüşümü
ItemsControl'dan devralan denetimler için .NET Framework 3.5 SP1'e eklenen bir kullanıcı arabirimi sanallaştırma iyileştirmesi, kapsayıcı geri dönüşümüdür ve ayrıca kaydırma performansını da iyileştirebilir. UI sanallaştırma kullanan bir ItemsControl doldurulduğunda, görünüme giren her öğe için bir kapsayıcı oluşturur ve görünümden çıkan her öğe için bu kapsayıcıyı 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ı ItemsControlkaydırdıkça öğe kapsayıcıları sürekli oluşturulmaz ve yok olmaz. VirtualizationMode ekli özelliğini Recyclingolarak ayarlayarak öğe geri dönüşümünü etkinleştirmeyi seçebilirsiniz.
Sanallaştırmayı destekleyen tüm ItemsControl konteyner geri dönüşümünü kullanabilir. bir ListBoxcontainer geri dönüşümünü etkinleştirmenin örneği 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, VirtualizingStackPanel sınıfını genişleten özel bir panel uygulamanız gerekir. VirtualizingStackPanel sınıfı OnViewportSizeChanged, LineUp, PageUpve MouseWheelUpgibi sanal 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, kalıp genişlemesi nedeniyle oluşan nesneleri de içerir. Örneğin, bir Buttonoluşturduğunuzda görsel ağaçta ClassicBorderDecorator ve ContentPresenter nesneleri de alırsınız. 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, geciktirilmiş 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 IsDeferredScrollingEnabled özelliğini trueolarak ayarlayın.
IsDeferredScrollingEnabled ekli bir özelliktir ve ScrollViewer ve denetim şablonunda ScrollViewer olan herhangi bir 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.
| Yönetim | 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 | Mevcut değil | Mevcut değil | Etkinleştirilebilir |
| ListBox | Varsayılan | Etkinleştirilebilir | Etkinleştirilebilir |
| ListView | Varsayılan | Etkinleştirilebilir | Etkinleştirilebilir |
| TreeView | Etkinleştirilebilir | Etkinleştirilebilir | Etkinleştirilebilir |
| ToolBar | Mevcut değil | Mevcut değil | Etkinleştirilebilir |
Uyarı
Örnek bir TreeViewüzerinde sanallaştırmayı ve kapsayıcı geri dönüşümünü nasıl etkinleştireceğinizi görmek için: TreeViewPerformansını Geliştirme'ye bakın.
Ayrıca bakınız
.NET Desktop feedback