Aracılığıyla paylaş


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

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ı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