Je travaille sur une application WPF qui a plusieurs toiles et beaucoup de boutons. L'utilisateur peut charger des images pour changer l'arrière-plan du bouton.WPF BitmapImage Problème de mémoire
C'est le code où je charge l'image dans l'objet BitmapImage
bmp = new BitmapImage();
bmp.BeginInit();
bmp.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.UriSource = new Uri(relativeUri, UriKind.Relative);
bmp.EndInit();
et EndInit() la mémoire de l'application se développe très bien.
Une chose qui fait ravise (mais ne pas vraiment résoudre le problème) ajoute
bmp.DecodePixelWidth = 1024;
1024 - ma taille maximale de la toile. Mais je devrais le faire seulement pour les images avec une largeur supérieure à 1024 - alors comment puis-je obtenir la largeur avant EndInit()?
Wow, c'est vraiment impressionnant de voir quelle différence cela fait pour moi - pas seulement en mémoire mais aussi en performance. Merci pour une réponse incroyablement simple et claire - pour un navigateur de fichiers galerie de photos cela seul résolu un certain nombre de problèmes que j'avais! – tpartee