Wdrażam listę, która może z łatwością zawierać 10 000 małych zdjęć. Rzeczywisty przypadek użycia pokazuje listę miniatur wideo, dzięki czemu możesz przewijać wideo klatka po klatce. Wstawiam miniaturę wideo na listę co 2/3 sekundy filmu. Potrzebuję obsługiwać bardzo długie filmy wideo (np. 1 godz. Wideo).Wirtualizacja danych swobodnego dostępu dla ListView w systemie Windows Runtime
Więc wirtualizacji opcje:
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780657.aspx
Próbowałem „Przyrostową wirtualizacji danych” i że zużywa zbyt dużo pamięci dla mnie, ponieważ obrazy mogą być określone tylko przez strumienie, a ja w końcu otwarcie 10000 strumienie. To spowodowałoby awarię aplikacji Windows Phone z powodu braku pamięci.
Teraz chciałbym spróbować "Wirtualizacja danych o dostępie swobodnym". Widzę, jak zaimplementować interfejsy IObservableVector<object>, INotifyCollectionChanged
(tak <object>
b/c <T>
nie działa). Najtrudniejsze jest to, jak mogę pozbyć się obrazów i załadować obrazy. Ładowanie obrazów to metoda asynchroniczna.
Dodatkowo uważam, że to rozwiązanie powinno zawierać symbole zastępcze, tak jak mówi dokument MSFT. "Przykład tego typu wirtualizacji danych jest często spotykany w aplikacjach do przeglądania zdjęć. Zamiast czekać na pobranie wszystkich zdjęć z albumu, Aplikacja pokazuje obrazy zastępcze. Po pobraniu każdego obrazu aplikacja zastępuje element zastępczy dla tego obrazu renderowaniem rzeczywistego zdjęcia. Mimo że wszystkie obrazy nie zostały pobrane i wyświetlone, użytkownik może nadal przesuwać i wchodzić w interakcje z kolekcja."
Przeglądanie próbki MSFT dla elementów zastępczych - użycie "ContainerContentChanging" wydaje się być ważną ścieżką. Zgaduję, że istnieje sposób na pozbycie się obrazu w tym wydarzeniu i także załadowanie obrazu. https://code.msdn.microsoft.com/windowsapps/ListViewSimple-d5fc27dd
wrzenia to w dół na pytanie - Gdzie jest to możliwe, aby wyrzucać strumienia obrazu i rozpocząć obciążenie obrazu na liście wirtualizacji dostępie swobodnym? Jest to bardzo często spotykany scenariusz w aplikacjach fotograficznych i jest bardzo łatwy do zrobienia w iOS, ale wydaje się, że nikt jeszcze nie zrobił tego w środowisku wykonawczym Windows.
W tym przypadku nie ładujesz obrazu samodzielnie, co muszę zrobić. Twoje właśnie użycie identyfikatora URI. Muszę otworzyć strumień i zamknąć go ostatecznie – Quincy
Czy cały ten kod nie jest zależny od WPF? AsyncVirtualizingCollection nie jest dostępny w winrt – Quincy
@Quincy Edytowałem swoją odpowiedź. Sprawdź to jeszcze raz. – dbvega