Những rò rỉ bộ nhớ tiềm năng có thể xảy ra nếu bạn sử dụng điều khiển hình ảnh (và không sử dụng phương pháp Freeze):
a) Bạn sử dụng BitmapImage như Image nguồn và không nhả 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) bạn gán nhiều BitmapImage là nguồn hình ảnh và không phát hành tất cả các BitmapImage bạn sử dụng (tương tự như (a)). Điều này một giới thiệu trong 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);
Nguồn: WPF Performance
Rất hữu ích cảm ơn bạn. Tôi đã không nhận ra rằng bạn có thể làm điều này trên một chủ đề nền, nên giúp một trong các ứng dụng của tôi đáng kể! – Kelly