Ich implementiere eine Liste, die leicht 10.000 kleine Bilder enthalten könnte. Der aktuelle Anwendungsfall zeigt eine Liste von Miniaturansichten eines Videos, so dass Sie durch ein Video Bild für Bild blättern können. Ich habe alle zwei Drittelsekunden im Video ein Miniaturbild des Videos in die Liste eingefügt. Ich muss sehr lange Videos (z. B. 1-Stunden-Video) unterstützen.Direkte Datenvirtualisierung für ListView unter Windows Runtime
So Virtualisierungsmöglichkeiten:
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780657.aspx
Ich habe versucht, „Incremental Datenvirtualisierung“ und verbraucht zu viel Speicher für mich, weil die Bilder nur über Ströme bezeichnet werden kann, und ich würde am Ende 10.000 Öffnung Ströme. Dies würde eine Windows Phone-Anwendung wegen nicht genügend Arbeitsspeicher zum Absturz bringen.
Jetzt möchte ich "Random Access Datenvirtualisierung" versuchen. Ich sehe, wie die Schnittstellen IObservableVector<object>, INotifyCollectionChanged
implementieren (ja <object>
b/c <T>
funktioniert nicht). Der schwierige Teil ist, wie ich Bilder entsorgen und Bilder laden kann. Das Laden von Bildern ist eine Async-Methode.
Darüber hinaus sollte diese Lösung Platzhalter enthalten, genau wie das MSFT-Dokument sagt "Ein Beispiel für diese Art der Datenvirtualisierung wird häufig in Fotoanzeige-Apps gesehen. Anstatt den Benutzer warten zu lassen, alle Fotos in einem Album herunterzuladen Die App zeigt Platzhalterbilder an.Während jedes Bild abgerufen wird, ersetzt die App das Platzhalterelement fürdas Bild durch ein Rendering des tatsächlichen Fotos.Während alle Bilder noch nicht heruntergeladen und angezeigt wurden, kann der Benutzer trotzdem schwenken und mit dem Bild interagieren Sammlung."
Wenn Sie das MSFT-Beispiel für Platzhalter betrachten, scheint die Verwendung von "ContainerContentChanging" ein wichtiger Pfad zu sein. Ich vermute hier, dass es eine Möglichkeit gibt, das Bild innerhalb dieses Ereignisses zu entsorgen und auch das Laden eines Bildes zu starten. https://code.msdn.microsoft.com/windowsapps/ListViewSimple-d5fc27dd
Boiling dies auf eine Frage nach unten - Wo ist es möglich, den Bildstrom zu verfügen und die Last eines Bildes für eine Direktzugriffs Virtualisierung Liste starten? Dies ist ein sehr häufiges Szenario in Foto-Apps und ist sehr einfach in iOS zu tun, aber es scheint noch niemand es unter Windows-Laufzeitumgebung getan hat.
In diesem Ihr Laden nicht das Bild selbst, was ich tun muss. Sie verwenden nur einen URI. Ich muss einen Stream öffnen und schließen Sie schließlich – Quincy
Ist nicht alle dieser Code von WPF abhängig? AsyncVirtualizingCollection ist in Winrt nicht verfügbar – Quincy
@Quincy Ich habe meine Antwort bearbeitet. Bitte überprüfen Sie es noch einmal. – dbvega