2009-06-17 39 views
5

Bu article ve gözlemlenebilir koleksiyonun neden WPF Listesindeki bir <> koleksiyonundan önemli ölçüde daha hızlı (20 ms'ye karşılık 1685 ms, bu 800 kat daha hızlı) bağlandığını bilmek isterim. Ben ObservableCollection dahili özelliklerine bakıp Burada neler oluyor GözlemlenebilirKoleksiyon Veri bağlama performansı

public Collection() 
{ 
    this.items = new List<T>(); 
} 

depolama toplama nesne (ben reflektör kullanılmış ve yapıcı odasında gördüm) var gibi bir Listesi'ni kullanır?

cevap

8

o makalede karşılaştırma değildir arasına iki basit bağlama işlemleri ise, bu ölçümler Zaten bir List<T> veya ObservableCollection<T> ya bağlı bir WPF ListBox için tek bir öğe eklemek edildiği bir senaryoya bakın. Yazar, konuşmasında şöyle

:

... CLR List<T> nesne otomatik olarak koleksiyon değiştiren olayı yükseltmez. amacıyla değişiklikleri almak için ListBox olsun, sen çalışanların listenizi yeniden ve ListBox ait ItemsSource özelliğine yeniden takmak gerekir. Bu çözüm işe yararken, bu büyük performans etkisini tanıtır. Her zaman ListBox ilk önceki öğeleri atıyor ve tüm listesini yeniden oluşturur, yeni bir nesneye ListBox arasında ItemsSource yeniden atama.

Bu performans farkı açıklar. ObservableCollection<T> bir List<T> tarafından desteklenmektedir olsa da, tüm bu ekstra işleme gerek kalmaz INotifyCollectionChanged arabirimini uygular.

+2

Daha kesin bir şekilde INotifyCollectionChanged, ObservableCollection tarafından uygulanır

+0

Teşekkür ederim, Bryce - düzeltildi. –

+0

Yani, bir List 1000 maddeden ve doğru, aynı süreyi alacağını ürün 1000 bir ObservableCollection varsa? Mantıklı. Eğer doğru anlamak – Jose