Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Entwurf Ihrer WPF-Anwendung kann sich auf die Leistung auswirken, indem beim Berechnen des Layouts und beim Überprüfen von Objektverweise unnötigen Aufwand entsteht. Die Erstellung von Objekten, insbesondere zur Laufzeit, kann sich auf die Leistungsmerkmale Ihrer Anwendung auswirken.
Dieses Thema enthält Leistungsempfehlungen in diesen Bereichen.
Gestaltung
Der Begriff "Layoutdurchlauf" beschreibt den Prozess des Messens und Anordnens der Mitglieder einer Sammlung von untergeordneten Elementen eines Panel-abgeleiteten Objekts und ihrer anschließenden Darstellung auf dem Bildschirm. Der Layoutdurchlauf ist ein mathematisch intensiver Prozess – je größer die Anzahl der untergeordneten Elemente in der Auflistung ist, desto größer ist die Anzahl der erforderlichen Berechnungen. Jedes Mal, wenn ein untergeordnetes UIElement Objekt in der Auflistung seine Position ändert, hat es das Potenzial, einen neuen Durchlauf durch das Layoutsystem auszulösen. Aufgrund der engen Beziehung zwischen Objektmerkmalen und Layoutverhalten ist es wichtig, den Typ der Ereignisse zu verstehen, die das Layoutsystem aufrufen können. Ihre Anwendung leistet besser, indem unnötige Aufrufe des Layoutdurchlaufs so weit wie möglich reduziert werden.
Das Layout-System führt für jedes Kindelement in einer Sammlung zwei Durchläufe durch: einen Messdurchlauf und einen Anordnungsdurchlauf. Jedes untergeordnete Objekt stellt eine überschreibende Implementierung der Measure und Arrange Methoden bereit, um spezifisches Layoutverhalten bereitzustellen. Im einfachsten Sinne ist das Layout ein rekursives System, das dazu führt, dass ein Element auf dem Bildschirm in der Größe angepasst, positioniert und gezeichnet wird.
Ein untergeordnetes UIElement Objekt beginnt den Layoutprozess, indem zuerst seine Kerneigenschaften gemessen werden.
Die Eigenschaften des FrameworkElement Objekts, die sich auf die Größe beziehen, z. B. Width, Height und Margin, werden ausgewertet.
Panel-spezifische Logik wird angewendet, z. B. die Dock Eigenschaft des DockPanel, oder die Orientation Eigenschaft der StackPanel.
Inhalte werden angeordnet oder positioniert, nachdem alle untergeordneten Objekte gemessen wurden.
Die Auflistung untergeordneter Objekte wird auf den Bildschirm gezeichnet.
Der Layoutdurchlaufvorgang wird erneut aufgerufen, wenn eine der folgenden Aktionen ausgeführt wird:
Der Sammlung wird ein Kindobjekt hinzugefügt.
A LayoutTransform wird auf das untergeordnete Objekt angewendet.
Die UpdateLayout Methode wird für das untergeordnete Objekt aufgerufen.
Wenn eine Änderung am Wert einer Abhängigkeitseigenschaft auftritt, die mit Metadaten gekennzeichnet ist, welche das Messen oder Anordnen beeinflussen.
Verwenden Des effizientesten Panels, sofern möglich
Die Komplexität des Layoutprozesses basiert direkt auf dem Layoutverhalten der Panelvon Ihnen verwendeten abgeleiteten Elemente. Beispielsweise bietet ein GridStackPanel Steuerelement wesentlich mehr Funktionen als ein Canvas Steuerelement. Der Preis für diese höhere Funktionalitätssteigerung ist eine größere Erhöhung der Leistungskosten. Wenn Sie jedoch nicht die Funktionalität benötigen, die ein Grid Steuerelement bereitstellt, sollten Sie die weniger kostspieligen Alternativen verwenden, z. B. ein Canvas oder ein benutzerdefiniertes Panel.
Weitere Informationen finden Sie unter Übersicht über Panels.
Aktualisieren anstelle von RenderTransform
Möglicherweise können Sie ein Transform aktualisieren, anstatt es als Bestandteil einer RenderTransform-Eigenschaft zu ersetzen. Dies gilt insbesondere für Szenarien mit Animationen. Durch das Aktualisieren eines vorhandenen Transform vermeiden Sie eine unnötige Layoutberechnung zu initiieren.
Erstellen Sie Ihren Baum Top-Down
Wenn ein Knoten aus der logischen Struktur hinzugefügt oder entfernt wird, werden Eigenschaftsvaligierungen auf dem übergeordneten Element des Knotens und allen untergeordneten Elementen ausgelöst. Daher sollte immer ein Top-Down-Konstruktionsmuster befolgt werden, um den Kostenaufwand unnötiger Neubewertungen von Knoten zu vermeiden, die bereits validiert wurden. Die folgende Tabelle zeigt den Unterschied bei der Ausführungsgeschwindigkeit zwischen dem Erstellen einer Struktur von oben nach unten und unten nach oben, wobei die Struktur 150 Ebenen tief mit einem einzelnen TextBlock und DockPanel auf jeder Ebene ist.
| Aktion | Baumaufbau (in ms) | Rendern – umfasst den Baumstrukturaufbau (in ms) |
|---|---|---|
| Unten nach oben | 366 | 454 |
| Von oben nach unten | 11 | 96 |
Im folgenden Codebeispiel wird das Erstellen eines Baums von oben nach unten veranschaulicht.
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
Weitere Informationen zur logischen Struktur finden Sie unter "Strukturen" in WPF.
Siehe auch
.NET Desktop feedback