The solution to the problem of memory release in .NET BitmapImage
This article introduces the relevant knowledge of "the solution to the memory release problem of .NET BitmapImage". In the operation of actual cases, many people will encounter such a dilemma, so let the editor lead you to learn how to deal with these situations. I hope you can read it carefully and be able to achieve something!
Most of the codes found on the Internet are written in MemoryStream:
The copy code is as follows:
New Thread (new ThreadStart () = > {
Var bitmap = new BitmapImage ()
Bitmap.BeginInit ()
Using (var stream = new MemoryStream (File.ReadAllBytes (...)) {
Bitmap.StreamSource = stream
Bitmap.CacheOption = BitmapCacheOption.OnLoad
Bitmap.EndInit ()
Bitmap.Freeze ()
}
This.Dispatcher.Invoke ((Action) delegate {
Image1.Source = bitmap
});
}). Start ()
The problem comes today, when I set DecodeWidth to 100 to load 1000 pictures, the memory should maintain 1000 pictures, but in fact he retained the memory of all the original pictures until the BitmapImage was recycled, which made me very embarrassed, in other words, using (MemoryStream) did not really release the Buffer in the MemoryStream as we expected, so how can it be released?
In fact, the simplest thing is to simply abandon MemoryStream and switch to FileStream, as follows:
The copy code is as follows:
Using (var stream = new FileStream (path, FileMode.Open)) {
Image.BeginInit ()
Image.StreamSource = stream
Image.DecodePixelWidth = 100
Image.CacheOption = BitmapCacheOption.OnLoad
Image.EndInit ()
Image.Freeze ()
}
This is the end of the content of "the solution to the memory release problem of .NET BitmapImage". Thank you for reading. If you want to know more about the industry, you can follow the website, the editor will output more high-quality practical articles for you!