Optimieren der Leistung: Weitere Empfehlungen
Dieses Thema enthält Empfehlungen zur Leistung zusätzlich zu denen im Abschnitt Optimierung der WPF-Anwendungsleistung.
Dieses Thema enthält folgende Abschnitte:
Opacity bei Brush-Elementen im Vergleich zu Opacity bei Elementen
Konfigurieren des Diensts für den Schriftartencache zur Reduzierung der Startzeit
Opacity bei Brush-Elementen im Vergleich zu Opacity bei Elementen
Wenn Sie ein Brush-Element verwenden, um die Fill oder Stroke eines Elements festzulegen, ist es besser, den Brush.Opacity-Wert anstelle der Opacity-Eigenschaft des Elements zu definieren. Eine Änderung der Opacity-Eigenschaft eines Elements kann dazu führen, dass WPF eine temporäre Oberfläche erstellt.
Navigation zum Objekt
Das NavigationWindow-Objekt ist von Window abgeleitet und erweitert es um Unterstützung bei der Inhaltsnavigation, vor allem durch Aggregieren von NavigationService und ein Journal. Sie können den Clientbereich von NavigationWindow aktualisieren, indem Sie entweder einen URI (Uniform Resource Identifier) oder ein Objekt angeben. Im folgenden Beispiel werden beide Methoden veranschaulicht:
private void buttonGoToUri(object sender, RoutedEventArgs args)
{
navWindow.Source = new Uri("NewPage.xaml", UriKind.RelativeOrAbsolute);
}
private void buttonGoNewObject(object sender, RoutedEventArgs args)
{
NewPage nextPage = new NewPage();
nextPage.InitializeComponent();
navWindow.Content = nextPage;
}
Private Sub buttonGoToUri(ByVal sender As Object, ByVal args As RoutedEventArgs)
navWindow.Source = New Uri("NewPage.xaml", UriKind.RelativeOrAbsolute)
End Sub
Private Sub buttonGoNewObject(ByVal sender As Object, ByVal args As RoutedEventArgs)
Dim nextPage As New NewPage()
nextPage.InitializeComponent()
navWindow.Content = nextPage
End Sub
Jedes NavigationWindow-Objekt verfügt über ein Journal, in dem der Navigationsverlauf der Benutzer*innen in diesem Fenster aufgezeichnet wird. Die Erfassung dient unter anderem dazu, Benutzern die Rückverfolgung ihrer Schritte zu ermöglichen.
Wenn Sie mit einem URI (Uniform Resource Identifier) navigieren, wird im Journal nur der URI-Verweis aufgezeichnet. Dies bedeutet, dass die Seite bei jedem weiteren Besuch dynamisch rekonstruiert wird, was je nach Komplexität der Seite sehr zeitaufwändig sein kann. In diesem Fall wird für die Erfassung wenig Speicher beansprucht, aber für das Wiederherstellen der Seite ist möglicherweise viel Zeit nötig.
Wenn Sie mithilfe eines Objekts navigieren, speichert die Erfassung die gesamte visuelle Struktur des Objekts. Dies bedeutet, dass die Seite bei jedem weiteren Besuch sofort gerendert wird, ohne dass sie rekonstruiert werden muss. In diesem Fall wird für die Erfassung viel Speicher beansprucht, aber für das Wiederherstellen der Seite ist wenig Zeit nötig.
Wenn Sie das NavigationWindow-Objekt verwenden, müssen Sie bedenken, wie die Journalunterstützung die Leistung der Anwendung beeinträchtigt. Weitere Informationen finden Sie unter Übersicht über die Navigation.
Treffertests auf großen 3D-Oberflächen
Treffertests auf großen 3D-Oberflächen sind in Bezug auf CPU-Auslastung ein sehr aufwändiger Vorgang. Dies gilt insbesondere, wenn die 3D-Oberfläche animiert wird. Wenn Sie keine Treffertests auf diesen Oberflächen benötigen, sollten Sie die Treffertests deaktivieren. Bei Objekten, die von UIElement abgeleitet sind, können Treffertests deaktiviert werden, indem die IsHitTestVisible-Eigenschaft auf false
festgelegt wird.
CompositionTarget.Rendering-Ereignis
Das CompositionTarget.Rendering-Ereignis bewirkt eine kontinuierliche Animation durch WPF. Wenn Sie dieses Ereignis verwenden, sollten Sie es bei jeder Gelegenheit trennen.
Vermeiden von ScrollBarVisibility=Auto
Vermeiden Sie nach Möglichkeit die Verwendung des ScrollBarVisibility.Auto-Werts für die Eigenschaften HorizontalScrollBarVisibility
und VerticalScrollBarVisibility
. Diese Eigenschaften werden für RichTextBox-, ScrollViewer- und TextBox-Objekte und als angefügte Eigenschaft für das ListBox-Objekt definiert. Legen Sie stattdessen ScrollBarVisibility auf Disabled, Hidden oder Visible fest.
Der Auto-Wert ist für Fälle vorgesehen, in denen der Speicherplatz beschränkt ist und Scrollleisten nur bei Bedarf angezeigt werden sollen. Es kann zum Beispiel hilfreich sein, diesen ScrollBarVisibility-Wert bei einer ListBox mit 30 Elementen zu verwenden, aber nicht bei einer TextBox mit Hunderten von Textzeilen.
Konfigurieren des Diensts für den Schriftartencache zur Reduzierung der Startzeit
Der WPF-Dienst für den Schriftartencache stellt Schriftartdaten über WPF-Anwendungen hinweg zur Verfügung. Die erste WPF-Anwendung, die Sie ausführen, startet diesen Dienst, wenn er noch nicht ausgeführt wird. Bei Verwendung von Windows Vista können Sie den Dienst „Windows Presentation Foundation-Schriftartcache 3.0.0.0“ von „Manuell“ (Standardeinstellung) in „Automatisch (Verzögerter Start)“ ändern, um die anfängliche Startzeit von WPF-Anwendungen zu reduzieren.
Weitere Informationen
.NET Desktop feedback