| 

.NET C# Java Javascript Exception

3
Hallo,
meine Anwendung benötigt, im Bezug zur Größe, relativ viel Zeit zum Laden. Allerdings nur beim ersten Mal.
Wie kann ich das verhindern bzw. performanter machen? Gibt es da etwas was man beachten muss (Verschachtelungen von Grids usw.)?
News:
31.01.2012
mrmee 745 1 8
2 Antworten
3
Hallo,
In XAML werden die Controls in einer Baumstruktur gehalten, den sogenannten logischen bzw. den visuallen Baum. Jedes Control kann aus weiteren Controls bestehen.
Wenn Du nun ein Grid mit mehreren tausend Elementen aufbaust, wird erst einmal die Baumstruktue erstellt und dann angezeigt (gerendert).
Wenn also entweder der Baum zu gross ist und/oder das Rendering zu langsam ist, weil Du z.B. aufwändige grafische Effekte einsetzt, die nur software-aber nicht hardware gerendert werden können, so dauert es natürlich.

Abhilfe schafft hier z.B. die Virtualisierung von Listen (z.B. VirtualizingStackPanel.IsVirtualizing="true") , wodurch dann nur die Elemente angezeigt werden, die auch sichtbar sind. (Kleiner Baum)
Zur Ansicht der Baumstruktur hilft Dir Snoop oder zur 'Messung' der Perfomance die WPF Perfomance Suite.

Ziel ist es, die Baumstruktur klein zu halten. Ein Textblock bestehen aus weniger Childcontrols als eine Textbox. So sollte man schauen, wo man Controls durch 'kleinere' Controls ersetzen kann.
Manchmal hat man auch einfach Aninmationen auf hidden gesetzt, laufen aber trotzdem weiter, was die Anwendung verzögert. Die Perf Suite hilft hier. Bereiche in der Anwendung, wo die Anzeige softwaremäßig gerendert wird, wird farblich hervorgehoben. Hier muss man dann grafische Effekte anpassen.

Gruß
Dirk
31.01.2012
judgy 3,0k 1 1 8
judgy 3,0k 1 1 8
Erstmal danke für die schnelle Antwort,
allerdings verwende ich keine aufwändigen Animationen. Da es mein erstes WPF Projekt ist sieht mein XAML dementsprechend chaotisch aus. Gibt es eine Übersicht darüber welche Controls "groß" und welche "klein" sind. Derzeit hab ich ja alles quer durch die Bank. Bringt es etwas Templates zu verwenden?
mrmee 31.01.2012
Wenn es eine 'kleine' Anwendung ist, so stellt sicht die Frage, wo beim Start die Verzögerung entsteht:
- am aufwändigen Design?
- an zuvielen Datensätzen im Grid oder in einer Liste?
- am langsamen Laden der Daten aus der Persistenzschicht?
Teste mal, ob es schneller geht, wenn du nur ein paar Datensätze lädst. Wenn nicht, dann liegt es nicht am XAML, sondern am Zugriff auf die DB.
judgy 31.01.2012
Laut meinem Performancetool braucht this.Show() die Zeit. Leider seh ich aber dann nicht mehr was passiert.
mrmee 31.01.2012
Wenn die View geladen wird, werden keine Daten aus der Persistenzschicht geladen?
Kannst Du Deinen verschachtelten XAML mal posten?
Setzt Du auf MVVM?
judgy 02.02.2012
Leider ist es mein erstes Pojekt in WPF und da war mir MVVM noch nicht so geläufig. Im nachhinein wäre es klüger gewesen sich gleich damit auseinander zu setzen. Den Code darf ich leider nicht posten. Nein die Daten müssten bereits geladen sein.
mrmee 05.02.2012
0
Kenne Deine Anwendung nicht, daher auch keine Angabe zum optimierungsbedarf, aber wie sieht es aus mit einem Splash Screen. Damit bekäme ich als User Feedback dass sich etwas tut und wäre zufrieden. Was ist nicht OK finde ist wenn ich Doppelklick mache und ich einfach nicht weiss dass etwas passiert.
31.01.2012
Jaksa 4,0k 1 8
Die Anwendung ist eine Art Telefonbuch das im Hintergrund läuft. Wenn ich sie zum ersten mal anzeige (Anwendung selbst läuft ja bereits) bzw. nach einiger Zeit wieder anzeige, benötigt sie zu lange. Möchte nicht jedesmal einen Splashscreen anzeigen.
mrmee 31.01.2012
OK, dann habe ich das falsch verstanden. Ich dachte, Du startest die Anwendung und es dauert zu lange bis das erste Bild gezeigt wird.
Jaksa 31.01.2012

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH