WPF Bitmap-Leistung

8

Ich versuche zu verstehen, warum meine Bilder nicht bissig sind, also habe ich ein Beispiel erstellt, um die WPF-Leistung zu testen. Ich habe einen Timer verwendet, um zu berechnen, wie lange mein Event-Handler "Bilder anzeigen" ausgeführt hat, und eine Stoppuhr verwendet, um zu messen, wie lange es dauerte, bis die Bilder auf dem Bildschirm erschienen. Die Quintessenz: Bei der Anzeige von 100, 1600, 2500 und 3600 Bildern brauchte WPF 2, 9, 12 und 16 Sekunden nachdem mein Code beendet war, um die Bilder auf dem Bildschirm anzuzeigen. Ich fühle mich hilflos: Es scheint, ich kann meinen Code nicht verbessern, um die Bilder schneller erscheinen zu lassen - ich muss etwas mit WPF machen!

Meine Frage ist also: Was muss ich anders machen, damit die Bilder schneller angezeigt werden?

Die Testkonfiguration ist einfach:

Das Fenster enthält ein Gitter. Nachdem der "Test" -Knopf angeklickt wurde, werden Zeilen- und Spaltendefinitionen hinzugefügt. Dann wird ein Bild zu jeder Zelle des Gitters wie folgt hinzugefügt:

%Vor%

Schließlich wird die Quelle jedes Bildes auf eine Bitmap gesetzt: ein Graustufenbild, das bereits auf die geschätzte Bildschirmgröße verkleinert wurde. Die Bitmap wird wie folgt generiert:

%Vor%

Also, ich bin am Ende meiner Weisheit. Die Bilder erscheinen mit einer merklichen Verzögerung, und es scheint, als ob sie außerhalb meiner Kontrolle wäre. Was kann ich tun?

    
Avi 13.02.2012, 18:18
quelle

2 Antworten

3

Was den Unterschied zu machen scheint, ist das Setzen der Cache-Option des Bildes auf OnLoad

kleinerBitmapImage.CacheOption = BitmapCacheOption.OnLoad;

Dies hat die Arbeit zu meinem Event-Handler verschoben, so dass ich jetzt das Pre-Fetching dazu verwenden kann, dies im Hintergrund zu tun.

    
Avi 14.02.2012, 22:39
quelle
3

Siehst du eigentlich alle diese Bilder gleichzeitig? Wenn nicht, können Sie ItemsControl mit einem Virtualisierungspanel verwenden, so dass nur Bilder in der Ansicht angezeigt werden. (Apropos Panels, Ihr aktuelles Setup könnte auch durch ein ItemsControl ersetzt werden, das ein UniformGrid als Bereich )

Sie könnten auch versuchen, einen besseren Decoder zu schreiben, was wahrscheinlich eine Verschwendung ist.

    
H.B. 13.02.2012 18:29
quelle

Tags und Links