Я реализую небольшой просмотрщик изображений, к сожалению, я сталкиваюсь с утечкой памяти. Ниже приведен порядок загрузки.C# Image loader memory leak
public BitmapSource getImage(string fileName, double width, double height)
{
FileStream s = File.Open(fileName, FileMode.Open);
Image i = Image.FromStream(s, false, false);
double iWidth = i.Width;
double iHeight = i.Height;
i.Dispose();
s.Close();
BitmapImage tmpImage = new BitmapImage();
tmpImage.BeginInit();
tmpImage.CacheOption = BitmapCacheOption.OnLoad;
tmpImage.UriSource = new Uri(fileName);
if (iWidth > iHeight)
{
tmpImage.DecodePixelWidth = (int)width;
}
else
{
tmpImage.DecodePixelHeight = (int)height;
}
tmpImage.EndInit();
return tmpImage;
}
Это, как я называю Загрузчик
private void whenArrowKeyPressed(int index)
{
CurrentImage = fh.getImage(fileList[index], 1920, 1080);
}
CurrentImage это свойство, которое связано с WPF ViewBox.
Любые идеи? Я также попытался прочитать StreamSource с тем же эффектом.
Вы не располагаете FileStream. Вызовите s.Dispose() вместо s.Close(); Dispose также позаботится о закрытии. –
Спасибо, я мог видеть некоторое улучшение. К сожалению, это не решение проблемы полностью. При показе первого изображения приложение использует ок. 150MB, после переключения несколько раз, я вижу теперь повышение до ca, 300MB – user5230928
Я думаю, что ваша проблема должна быть в некотором коде, который вы не разместили. Я не вижу ничего другого в коде, который вы опубликовали. –