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.
WPF uygulamanızın tasarımı, düzen hesaplama ve nesne başvurularını doğrulama konusunda gereksiz ek yük oluşturarak performansını etkileyebilir. Özellikle çalışma zamanında nesnelerin oluşturulması uygulamanızın performans özelliklerini etkileyebilir.
Bu konu, bu alanlarda performans önerileri sağlar.
Tasarım Düzeni
"Düzen geçişi" terimi, Paneltüretilmiş bir nesnenin alt öğe koleksiyonunun üyelerini ölçme ve yerleştirme süreçlerini, ve sonrasında bunların ekranda çizilmesi işlemini açıklar. Düzen geçişi matematiksel açıdan yoğun bir işlemdir; koleksiyondaki alt öğe sayısı ne kadar fazlaysa, gereken hesaplama sayısı da o kadar fazladır. Örneğin, koleksiyondaki bir çocuk UIElement nesnesi her konum değiştirdiğinde, düzen sistemi tarafından yeni bir geçişin tetiklenme potansiyeli bulunur. Nesne özellikleri ve düzen davranışı arasındaki yakın ilişki nedeniyle, düzen sistemini çağırabilecek olayların türünü anlamak önemlidir. Uygulamanız, düzen geçişinin gereksiz çağrılarını mümkün olduğunca azaltarak daha iyi performans gösterir.
Düzen sistemi, bir koleksiyondaki her bir alt üye için iki geçiş tamamlar: ölçüm geçişi ve düzenleme geçişi. Her bir alt nesne, kendi özel yerleşim davranışını sağlamak için Measure ve Arrange yöntemlerinin kendi geçersiz kılınmış uygulamasını sağlar. En basiti düzen, bir öğenin boyutlandırılmasını, konumlandırılmasını ve ekranda çizilmesini sağlayan özyinelemeli bir sistemdir.
Alt UIElement nesnesi, önce temel özelliklerini ölçerek düzen işlemine başlar.
Nesnenin FrameworkElement, Widthve Heightgibi boyutla ilgili Margin özellikleri değerlendirilir.
Panel'e özgü mantık, Dock'nin DockPanel özelliği veya Orientation'ün StackPanel özelliği gibi durumlarda uygulanır.
Tüm alt nesneler ölçüldükten sonra içerik düzenlenir veya konumlandırılır.
Çocuk nesnelerin koleksiyonu ekranda görünür.
Aşağıdaki eylemlerden herhangi biri gerçekleşirse düzen geçişi işlemi yeniden çağrılır:
Koleksiyona bir alt nesne eklenir.
Alt öğeye bir LayoutTransform uygulanır.
çocuk nesne için UpdateLayout yöntemi çağrılır.
Meta veriler kullanılarak ölçüm veya düzenleme işlemlerini etkileyen bir bağımlılık özelliğinin değeri değiştiğinde.
Mümkün Olduğunda En Verimli Paneli Kullanma
Düzen işleminin karmaşıklığı doğrudan kullandığınız Paneltüretilmiş öğelerin düzen davranışına bağlıdır. Örneğin, bir Grid veya StackPanel denetimi, Canvas denetiminden çok daha fazla işlevsellik sağlar. İşlevsellikteki bu artışın fiyatı, performans maliyetlerinde daha yüksek bir artıştır. Ancak, bir Grid denetiminin sağladığı işlevlere ihtiyacınız yoksa, Canvas veya özel panel gibi daha düşük maliyetli alternatifleri kullanmanız gerekir.
Daha fazla bilgi için bkz. Panellere Genel Bakış.
RenderTransform'u Değiştirmek Yerine Güncelleştir
Bir Transform'ı, bir RenderTransform özelliğinin değeri olarak değiştirmek yerine güncelleyebilirsiniz. Bu özellikle animasyon içeren senaryolarda geçerlidir. Mevcut bir Transformgüncelleştirerek, gereksiz bir düzen hesaplaması başlatmaktan kaçınabilirsiniz.
Ağacınızı oluşturma Top-Down
Bir düğüm mantıksal ağaçtan eklendiğinde veya kaldırıldığında, düğümün ana öğesinde ve tüm alt öğelerinde özellik geçersizliği başlatılır. Sonuç olarak, önceden doğrulanmış düğümlerde gereksiz geçersiz kılınmaların maliyetini önlemek için her zaman yukarıdan aşağıya bir yapı deseni izlenmelidir. Aşağıdaki tabloda, ağacın 150 seviyeli olduğu ve her seviyede yalnızca bir TextBlock ve DockPanel bulunduğu durumda, yukarıdan aşağıya karşı aşağıdan yukarıya oluşturma arasındaki yürütme hızı farkı gösterilmektedir.
| Eylem | Ağaç oluşturma (ms cinsinden) | Render— ağaç oluşturma (ms) süresini içerir |
|---|---|---|
| Alttan yukarı | 366 | 454 |
| Yukarıdan aşağıya | 11 | 96 |
Aşağıdaki kod örneğinde yukarıdan aşağıya bir ağacın nasıl oluşturulacağı gösterilmektedir.
private void OnBuildTreeTopDown(object sender, RoutedEventArgs e)
{
TextBlock textBlock = new TextBlock();
textBlock.Text = "Default";
DockPanel parentPanel = new DockPanel();
DockPanel childPanel;
myCanvas.Children.Add(parentPanel);
myCanvas.Children.Add(textBlock);
for (int i = 0; i < 150; i++)
{
textBlock = new TextBlock();
textBlock.Text = "Default";
parentPanel.Children.Add(textBlock);
childPanel = new DockPanel();
parentPanel.Children.Add(childPanel);
parentPanel = childPanel;
}
}
Private Sub OnBuildTreeTopDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim textBlock As New TextBlock()
textBlock.Text = "Default"
Dim parentPanel As New DockPanel()
Dim childPanel As DockPanel
myCanvas.Children.Add(parentPanel)
myCanvas.Children.Add(textBlock)
For i As Integer = 0 To 149
textBlock = New TextBlock()
textBlock.Text = "Default"
parentPanel.Children.Add(textBlock)
childPanel = New DockPanel()
parentPanel.Children.Add(childPanel)
parentPanel = childPanel
Next i
End Sub
Mantıksal ağaç hakkında daha fazla bilgi için bkz. WPF
Ayrıca bakınız
- WPF Uygulama Performansını Optimize Etme
- Uygulama Performansı Planlama
- Donanımdan Yararlanma
- 2B Grafik ve Görüntüleme
- Nesne Davranışı
- Uygulama Kaynakları
- Metin
- Veri Bağlama
- Diğer Performans Önerileri
- Düzen
.NET Desktop feedback