25

Ich bin neu in Programmierung Windows Speichern Sie Apps mit C# und ich versuche zu verstehen, wie Bildspeicher behandelt wird. Meine App ist sehr einfach:Wie behandelt WinRT BitmapImage und Bildspeicher

1) es referenziert eine Bitmap aus einer Datei mit einem Windows.UI.Xaml.Media.Imaging.BitmapImage Objekt und verwendet dieses dann als Quelle für ein Windows.UI.Xaml.Controls.Image Objekt. In meinem Fall hat das Bild auf der Festplatte größere Abmessungen als das, was auf dem Bildschirm angezeigt wird, so dass es vom System skaliert wird.

Meine Frage ist, wie funktioniert WinRT den Speicher für das Bild? Ich benutzte das vmmap Werkzeug und ich sehe in der Mapped File Abschnitt gibt es einen Eintrag für meine Bilddatei. Ich denke, das bedeutet, dass die Rohbytes für diese Datei vollständig in den Speicher geladen werden. Da es sich um ein JPG handelt, müssen diese Bytes in Pixel-Bytes dekodiert werden. Es scheint von meinen Tests, dass die Einstellung der UriSource der BitmapImage tatsächlich keine Verarbeitung stattfindet, da es 0 ms dauert und dass stattdessen etwas Lazy Loading ausgeführt wird.

Also die Fragen sind: Welches Objekt ist der dominator der unkomprimierten unskalierten Pixeldaten? Welches Objekt ist der Dominator für die skalierten Pixeldaten, die auf dem Bildschirm gezeichnet werden? Gibt es Werkzeuge, die mir das leicht zeigen können? In der Java-Welt verwende ich das Eclipse-Speicheranalyse-Tool. Ich habe versucht, PerfView zu verwenden, aber die Ergebnisse ergeben für mich keinen Sinn, es scheint, dass das Tool für die Leistungsanalyse gedacht war.

UPDATE:

Auf der Konferenz BUILD das Team der Windows Performance Toolkit diskutiert. Ich hörte nie jemand erwähnen PerfView so glaube ich, dass die WPT die neueste und beste Werkzeug für die Analyse von Speicher und Performance, hier ist ein Link lautet:

http://msdn.microsoft.com/en-us/performance/cc825801.aspx

+2

Es gibt eine ziemlich steile API dahinter, lesen Sie hier [http://msdn.microsoft.com/en-us/library/windows/desktop/ee719902%28v=vs.85%29.aspx] –

+0

Ich glaube, die meisten Bildquellenobjekte werden hinter einem InMemoryRandomAccessStream oder ähnlichem gesichert. Sie können versuchen, PerfView/PerfMon zu verwenden, um etwas mehr zu erfahren. –

+1

Ich erinnere mich nicht genau, aber skaliert das Bildsteuerelement die Quelle nicht basierend auf ihren Größeneinstellungen? I.E. Sie setzen ein Steuerelement in ein XAML-Fenster und das Framework-Element, das das Bildsteuerelement ist, ist etwa 800x600 groß, wenn das Bild wirklich 1920x1080 ist? –

Antwort

1

Eine kurze Antwort ist höchstwahrscheinlich „optimal“. Da es kein Klugscheißer ist, gibt es einfach eine Menge verschiedener Systeme. Eine erwähnte Hardwarebeschleunigung, Sie können auch die Anzahl der Kerne berücksichtigen, den Speicher anzeigen, die Plattengeschwindigkeit, die Bittiefe und die Auflösung des Monitors überwachen, die Liste geht weiter und weiter.