вторник, 15 ноября 2011 г.

C# MemoryOutExeption при использовании Image.FromStream и при закрытии MemoryStream

Конструкция

public static Image GetImage(byte[] data) {

if (data == null) return null;

MemoryStream ms = new MemoryStream(data);

Image img = Image.FromStream(ms);

// closing the stream later crashes the application

// ms.Close(); // => memory leak

return img;

}

при перерисовке изображения создаст OUT OF MEMORY exception.

Если закрывать MemoryStream, то будет memory leak



Для решения проблемы нужно использовать следующий фрагмент

Image img = Image.FromStream(ms);

Image ReturnMe = (Image)img.Clone();

img = null;

ms.close();



Рабочий вариант:

public static Image GetImage(byte[] data) {

if (data == null) return null;

MemoryStream ms = new MemoryStream(data);

Image img = Image.FromStream(ms);

Image ReturnMe = (Image)img.Clone();

img = null;

ms.close();

return ReturnMe;

}

Комментариев нет:

Отправить комментарий