Когда вы используете API на основе GDI + (System.Drawing), исключение OutOfMemory
не обязательно означает, что у вас недостаточно памяти. Это также может означать, что параметры, переданные в GDI +, являются недопустимыми или по какой-либо другой причине. GDI + довольно OutOfMemory
счастлив.
Вам также следует повторно использовать поток памяти, если это возможно. Это снижает давление ГХ много . Вы выделяете много больших объектов, и в этом сценарии GC довольно плохой.
Также я думаю, что вы никогда не выбрасываете lCurrent
.
Тогда вы нарушаете договор Image.FromStream
:
Вы должны держать поток открытым в течение всего времени жизни изображения:
lImg = Image.FromStream(ms);
ms.Dispose();
lCurrent = new Bitmap(lImg);// `lImage` is used here, but `ms` is already disposed
lImg.Dispose();
Документация для Image.FromStream
гласит:
Вы должны держать поток открытым в течение всего времени жизни изображения.
Перемещение ms.Dispose()
позади lImg.Dispose()