XAML-Tipp: WPF und Universal-Windows-Apps

Universal-Windows-Apps: TextBlock-Performance-Tipps
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: Universal-Windows-Apps: TextBlock-Performance-Tipps.

Bei meinem letzten Kundeneinsatz als Berater konnte ich wiederholt einige Fehler bei der Verwendung des TextBlock-Steuerelements entdecken, die einiges an Performance gekostet haben. Um meinen Lesern diesen Schlamassel zu ersparen, werden nun die Toptipps für das TextBlock-Steuerelement offenbart.

Windows 10: TextBlock-Elemente richtig einsetzen

Die erste gute Nachricht ist, dass das Rendern von Text ab Windows 10 bereits 50 Prozent schneller geworden ist. Werden nun jedoch diverse TextBlock-Einstellungen vorgenommen, wird der Render-Vorgang gebremst. Dazu zählt zum Beispiel, wenn der CharacterSpacing höher als 0 gesetzt wird, IsTextSelectionEnabled auf true, oder aber wenn LineStackingStregy den Wert von BaselineToBaseline/MaxHeight erhält. Bei TextTrimming ist ein Clip-Wert ebenfalls gefährlich. Noch häufiger habe ich aber das Festlegen des Texts via Inlinetext entdeckt. Die nachfolgenden Codezeilen zeigen, wie ein TextBlock-Element verwendet werden soll, und wie nicht:

 
<StackPanel>
  <TextBlock Text="This text is on the fast path."/>
  <TextBlock>This text is NOT on the fast path.</TextBlock>
<StackPanel/>

Ob Ihre TextBlock-Einstellungen ideal getroffen sind, können Sie ganz einfach selbst testen. Dazu aktivieren Sie beim Starten der App einen kleinen Helfer –IsTextPerformanceVisualizationEnabled – der den performanceoptimierten Text in grün darstellt, wie in Listing 1 und Abbildung 1 gezeigt. Jeder weitere Text, der nicht in grün dargestellt wird, muss aufwendiger gerendert werden. Es kann allerdings ganz spezielle Anforderungen geben, aufgrund derer sich der Text leider nicht optimieren lässt. Zum Beispiel wenn sie IsTextSelectionEnabled unbedingt benötigen. Vom Inlinetext hingegen wird der Text häufig explizit durch Inlinetextelemente wie <LineBreak/> formatiert. Das lässt sich durch ein weiteres TextBlock-Steuerelement elegant umgehen.

Listing 1: Visuelle Darstellung vom performanceoptimierten Text aktivieren

 
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
  if (System.Diagnostics.Debugger.IsAttached)
  {
    this.DebugSettings.IsTextPerformanceVisualizationEnabled = true;
  }
  #endif
  
  // ...

}
Abb.1: Der grüne Text wird performanceoptimiert gerendert

Abb.1: Der grüne Text wird performanceoptimiert gerendert

Schnell und überall: Datenzugriff mit Entity Framework Core 2.0

Dr. Holger Schwichtenberg (www.IT-Visions.de/5Minds IT-Solutions)

C# 7.0 – Neues im Detail

Christian Nagel (CN innovation)

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -