Ces éventuelles fuites de mémoire pourraient se produire si vous utilisez le contrôle de l'image (et ne pas utiliser la méthode Freeze):
a) Vous utilisez BitmapImage que l'image source et ne relâchez pas le BitmapImage:
static BitmapImage bi1 = new BitmapImage(new Uri("Bitmap1.bmp",UriKind.RelativeOrAbsolute));
m_Image1 = new Image();
m_Image1.Source = bi1;
//bi1.Freeze()
//if you do not Freeze, your app will leak memory.
MyStackPanel.Children.Add(m_Image1);
b) vous affecter plusieurs BitmapImage comme source d'image et ne libèrent pas tous les BitmapImage que vous avez utilisé (similaire à (a)). Celui-ci introduit en .Net 3.5:
static BitmapImage bi1 = new BitmapImage(new Uri("Bitmap1.bmp",
UriKind.RelativeOrAbsolute));
static BitmapImage bi2 = new BitmapImage(new Uri("Bitmap2.bmp",
UriKind.RelativeOrAbsolute));
bi2.Freeze();
m_Image1 = new Image();
//bi1.Freeze()
//even though you are really using bi2 for Image Source,
//you also need to Freeze bi1 it to avoid leak
m_Image1.Source = bi1; // use un-frozen bitmap, which causes the leak
m_Image1.Source = bi2; // use frozen bitmap
MyStackPanel.Children.Add(m_Image1);
Source: WPF Performance
Très utile merci. Je ne savais pas que vous pourriez faire cela sur un fil de fond, devrait considérablement aider une de mes applications! – Kelly