2010-03-08 11 views
8

Üzerinde çalıştığım bir proje, bazı küçük performans sorunlarından muzdarip. Ekibimiz performansta daha büyük kazanımlar elde etmek için çok sayıda küçük iyileştirme gerçekleştiriyor. Uygulamaya bazı bariz değişiklikler yaparak yardımcı olmayı başardık ve bazı ek iyileştirmeler sağlamak için veri bağlamaya baktık. Varsayılan bağlama modunun TwoWay olduğunu biliyorum, ancak çoğu bağımızın TwoWay bağlaması gerektirmiyor. Geçmek ve varsayılanı kabul ettiğimiz Mode'u OneWay olarak açıkça belirtmek için zamanımıza değer mi?WPF'de bağlamaları ayarlarken OneWay bağını açıkça belirtmek için bir performans avantajı var mı?

+0

Microsoft tarafından bu hataya göre bellek sızıntılarına neden olduğu kabul edilen bazı veri bağlama durumları vardır: http://support.microsoft.com/kb/938416 – jeffora

cevap

4

Üzgünüm, 1. sürüm% 100 yanlıştır (teşekkürler, @Jeffora). Onu burada saklıyorum, aksi takdirde yorumlar mantıklı değil.

Tek yönlü bir bağlamanın, değişiklik bildirimlerini dinlemek için kaynakla bir bağlantı kurması gerekmez, bu nedenle daha az bellek gerektirir, ancak hız söz konusu olduğunda, bir fark olduğunu düşünmüyorum .

2. sürüm: Hem OneWay hem de TwoWay bağlamaları, hedef özelliği güncelleştirmek için değişikliklerin kaynağına abone olur. Bu nedenle, performanstaki fark, güncelleme gerçekleştiğinde yazılımın geri kalan kısmına bağlı olarak, kaynak özelliğinin bir etkisi olabilecek bir güncelleştirmesidir.

Performans önemliyse ve senaryonuzun hedef güncellemelere ihtiyacı yoksa, OneTime ciltleme bir seçenek olabilir.

Sıcak noktaları bulmak için uygulamanızı belirleyip belirlemediğinizi sormak için bu düzeltmenin fırsatını değerlendiriyorum. 80/20 kuralı (veya olay 90/10) oldukça sıktır, yani harcanan zamanın çoğu için küçük bir miktar kod hesaplanır. Bunu bilmeden optimizasyon çabaları hiç kazanç sağlayamaz.

+0

İlginç. Bu yüzden, yüzlerce bu tür bağlamanın kurulmasından bahsediyorsak, bu dinleme olaylarının kablolanmasının pencereyi oluşturduktan sonra cpu döngüsü oluşturduğunu düşünebiliriz. Yani bir hız ve hafıza vuruşu olabilir, doğru mu? – Kilhoffer

+0

Doğru, Bu bağlantı kurulumu için gereken süreyi kısaltıyordum, ama binlerce kişiyle, onlar önemli olabilir. – Timores

+1

Tek yönlü bir bağlanma, değişiklik bildirimi kaynağını dinlemeye devam ediyor - tek seferlik bir bağlantı yok. – jeffora

İlgili konular