|
Problem z BitmapImage po migracji do .NET 4.0 |
Migracja do .NET 4.0 a sprawa BitmapImage
Próba zmigrowania pewnego projektu, który poprawnie kompiluje się i działa w .NET 3.5 napotkała spore problemy.
Po przełączeniu głównego projektu oraz projektów zależnych na .NET 4.0 oraz uzupełnieniu brakujących XAML, solucja skompilowała się bez problemu.
Jednak jakeż było moje zaskoczenie, kiedy po uruchomieniu program zeżarł cały dostępny RAM.
 Zużycie pamięci przy uruchomieniu w .NET 4.0 |
 Zużycie pamięci przy uruchomieniu w .NET 3.5 |
Uruchomienie wersji skompilowanej do 3.5 w środowisku 4.0 dowiodło, że kompilator jest niewinny i przyczyn trzeba szukać w samym środowisku uruchomieniowym.
Rozwiązanie okazało się tyleż proste co przerażające.
Różnica pomiędzy 3.5 a 4.0 w działaniu BitmapImage polega na tym, że w starej wersji tworzenie kolejnych instancji BitmapImage w oparciu o to samo Uri nie powoduje ładowania wielu kopii obrazka, natomiast w wersji 4.0 jak najbardziej! |