Performanceprobleme von Silverlight-Anwendungen finden und beheben

Performance ist ein heisses Thema, wenn es um Softwareentwicklung geht. So ist es nicht verwunderlich, dass dieses Thema auch bei Silverlight oft aufgebracht wird. Großteils kommen in diesem Zusammenhang immer dieselben Antworten:

  • EnableRedrawRegions aktivieren und beobachten, welche Bereiche häufig neu gezeichnet werden.
  • MaxFrameRate herunter setzen
  • Windowless nicht auf true setzen
  • Transparenzen vermeiden
  • XPerf zum Tracking der CPU-Verwendung etc. verwenden.
  • Text Rendering sparsam einsetzen

Alles sehr gute Tipps. In den meisten Fällen liegen die Probleme jedoch an anderen Stellen:

  • Zu viele Service Calls. Angebundene Services werden vielfach sehr häufig aufgerufen. Daten sollten nur dann bezogen werden, wenn diese auch tatsächlich benötigt werden. Ebenso ist es anzuraten, diese gesammelt zu beziehen. Es ist also zu vermeiden, jedes Objekt einzeln über ein Service zu beziehen. Auch ist darauf zu achten, dass Aktualisierungen nur wenn notwendig und wenn möglich, gesammelt, weiter gegeben werden.
  • Keine Wiederverwendung von Elementen. Häufig werden Elemente bei jeder Aktualisierung der Oberfläche neu erstellt, anstatt die vorhandenen weiter zu verwenden und lediglich Eigenschaften neu zu setzen.
  • Kein Auflösen von Event-Abonnements. Event-Abonnements sollten bei Nichtverwendung frei gegeben werden. Dies wird häufig unterlassen. Ein Verwerfen eines Objektes kann daher oft nicht durchgeführt werden. Dies führt zu überflüssigem Overhead und wirkt sich natürlich negativ auf die Performance aus.
  • Aktualisierung des gesamten Darstellungsbereiches. Nur Bereiche, die einer Veränderung unterliegen sollten aktualisiert werden. Bereiche ohne jegliche Änderung bedürfen dies nicht. Eine Aktualisierung würde nur unnötig Ressourcen verbrauchen.
  • Kompliziertes Softwaredesign. Vielfach wird das Softwaredesign zu kompliziert ausgelegt und Dinge vorgesehen, die über Versionen hinweg nicht benötigt werden. Ziel sollte es sein, nur das zu implementieren und damit zur Verfügung zu stellen, was auch tatsächlich benötigt wird. Dies hilft unnötige Aufrufe, Ereignisse etc. zu vermeiden.

Aus meiner Sicht ist es wichtig, ein möglichst einfaches Design (welches aber dennoch erweiterbar ist) zu verwenden. Frühzeitige Überlegungen hinsichtlich Datenbeschaffung und deren Abarbeitung hilft ebenfalls, unnötigen Overhead zu vermeiden und schafft die Grundlage, eine performante Silverlight-Anwendung zu entwickeln. Es sind die üblichen Verdächtigen, die auch hier zuschlagen. Ein Blick auf die oben genannten Themen hat zumindest mir in der Praxis immer wieder geholfen, Performanceprobleme in den Griff zu bekommen.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen