System: Windows XP SP3, .NET 3.5, 4 GB RAM, Dual 1.6 HzW jaki sposób upewniasz się, że WPF udostępnia duży obszar BitmapSource z pamięci?
Mam aplikację WPF, która ładuje i przenosi (za pomocą animacji Storyboard) bardzo duże pliki PNG. Te pliki PNG mają rozdzielczość 8190 x 1080. Po uruchomieniu aplikacji wydaje się, że buforuje obrazy, a pamięć System powoli się skacze. W końcu dławi system i generuje wyjątek OutOfMemoryException.
Oto kroki Jestem obecnie starać się rozwiązać ten problem:
1) Jestem usuwając obiekty BitmapSource z aplikacji
2) Jestem ustalające BitmapSource BitmapCacheOption None gdy załadować BitmapSource
3) Zamrażam BitmapSource po załadowaniu.
4) Usuwam wszystkie odniesienia do obrazu, który korzysta ze źródła, jak również wszelkie odniesienia do samego źródła.
5) Ręczne wywołanie GC.Collect() po wykonaniu powyższych kroków zostało zakończone.
Mając nadzieję, że zrozumiemy, dlaczego WPF wisi na pamięci dla tych obrazów i możliwe rozwiązanie, aby upewnić się, że pamięć użyta do ich załadowania jest prawidłowo odzyskana.
Źródło BitmapSource = new BitmapSource() nie będzie się kompilować i nie jestem pewien dlaczego. Zgłasza ten błąd: Błąd Nie można utworzyć wystąpienia klasy abstrakcyjnej lub interfejsu "System.Windows.Media.Imaging.BitmapSource" – discorax
Ahh..it kompiluje się, gdy używam BitmapImage zamiast BitmapSource. Teraz, w jaki sposób spowoduje to problemy? :) – discorax
Takie podejście wygląda obiecująco. Będę kontynuować test. – discorax