多次调用 GC.Collect() 后图像内存干净
Image memory clean after i call GC.Collect() many time
我正在使用图像进行预览。完成工作后,我只是将 ImageSource 设置为 null 并调用 GC.Collect() 但在调用 GC.Collect() 之后,50% 的内存仍处于保留状态,直到我再次调用 GC.Collect () ..
为什么打扫需要我打电话?
点击销毁后
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
销毁图像后设置image.Source = null,并调用GC.Collect();记忆还停留在原地。它应该会在一段时间后自动清理。
它会保留内存,直到我在 15-30 秒后调用 GC.Collect() 2-3 次。我怎样才能立即清理未使用的位图内存?
检查视频(里面的代码和步骤):- https://www.dropbox.com/s/457hhjnlttbzhlp/TinyTake%20by%20MangoApps-16-08-2018-06-28-51.mp4?dl=0
private void ImgDisplay_Click(object sender, RoutedEventArgs e)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var bitmap = new BitmapImage();
using (var stream = File.OpenRead(filePath))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
}
image.Source = bitmap;
}
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
private void ImgSelect_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();
filePath = openFileDialog1.FileName;
}
得到答案.. 需要在将 null 设置为图像源然后调用 GC 后更新布局
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
UpdateLayout();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
我正在使用图像进行预览。完成工作后,我只是将 ImageSource 设置为 null 并调用 GC.Collect() 但在调用 GC.Collect() 之后,50% 的内存仍处于保留状态,直到我再次调用 GC.Collect () ..
为什么打扫需要我打电话?
点击销毁后
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
销毁图像后设置image.Source = null,并调用GC.Collect();记忆还停留在原地。它应该会在一段时间后自动清理。
它会保留内存,直到我在 15-30 秒后调用 GC.Collect() 2-3 次。我怎样才能立即清理未使用的位图内存?
检查视频(里面的代码和步骤):- https://www.dropbox.com/s/457hhjnlttbzhlp/TinyTake%20by%20MangoApps-16-08-2018-06-28-51.mp4?dl=0
private void ImgDisplay_Click(object sender, RoutedEventArgs e)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var bitmap = new BitmapImage();
using (var stream = File.OpenRead(filePath))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze();
}
image.Source = bitmap;
}
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
private void ImgSelect_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();
filePath = openFileDialog1.FileName;
}
得到答案.. 需要在将 null 设置为图像源然后调用 GC 后更新布局
private void ImgDistry_Click(object sender, RoutedEventArgs e)
{
image.Source = null;
UpdateLayout();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}