Her biri kendi görünümünde birçok DataGrids (Silverlight Toolkit'ten) içeren bir SL uygulamasına sahibim. Birkaç DataGrids açılırsa, görünümler arasında geçiş yapmak (örneğin, TabItems) uzun bir süre alır (birkaç saniye) ve tüm uygulamayı (UI iş parçacığı) dondurur.Yüklü birçok denetleyici ile Silverlight performansı
Daha fazla DataGrids yüklenir, değişiklik ne kadar uzun sürer. UI değişimini yavaşlatan bu DataGrids, uygulamada başka yerlerde olabilir ve o anda bile görünmeyebilir. Fakat bir kez açıldığında (ve veri ile yüklendiklerinde), diğer DataGrids'i göstererek yavaşlarlar. DataGrids'in imha edilmediğini ve yeniden oluşturulmadığını unutmayın, yine de bellekte kalırlar, yalnızca ebeveyn denetimi gizlenir ve tekrar görünür olur.
Uygulamayı geliştirdim. Bu agcore.dll SetValue işlevi darboğaz olduğunu gösterir. Ne yazık ki, çizimden sorumlu bu Silverlight yerel kitaplığı için hata ayıklama sembolleri mevcut değildir.
Sorun, DataGrid denetiminde değil - XCeed'in ızgarasıyla değiştirmeyi denedim ve görünümleri değiştirirken performansı daha da kötü.
Bu sorunun nasıl çözüleceği hakkında bir fikriniz var mı? Neden daha açık kontroller diğer kontrolleri yavaşlatıyor?
Ben bu sorunu gösteren bir örnek oluşturdukGÜNCELLEME: sağlanan örnek üzerinde VS11 profilcisini kullanma , sorun MeasureOverride içinde olabileceğini düşündürmektedir her DataGridCell için (birçok kez çağrılan ben tahmin). Yine de, neden başka bir yerde daha fazla kontrol yüklendiğinden daha yavaş oluyor? Performansı iyileştirmenin bir yolu var mı?
UPDATE 2: Belirli bir uygulamamda TabControl kullanmıyorum. Halen etkin ViewModel'i göstermek için Caliburn.Micro ve ContentControl kullanıyorum. Ama aynı sorun TabControl ile bu yüzden çekirdek problemi tanımlamak için kullandım.
ile veri kılavuzunu değiştirin tüm uygulanan stilleri çıkarın burada (TabControl hakkında bit) tartışma bakın yardımcı olabilir: http://stackoverflow.com/questions/1389769/wpf-virtualizingstackpanel-for-increased-performance – Phil
Aslında, benim özgün uygulamada, bir TabControl yerine, Caliburn.Micro (MVVM framework) kullanın. ContentControl, şu anda aktif olan ViewModel'e (ve dolayısıyla Görünümüne) bağlıdır. Yine de, tartışmayı kontrol edip size bildiririm. Teşekkür ederim! – gius
filedropper 404'ed –