Это операции ввода/вывода вызывала утечку памяти


Мой коллега сделал некоторые оптимизации кода работы.

Ниже код из метода публичного класса (не статический класс или метод)

код до:

                Bitmap btMap = new Bitmap(Convert.ToInt32(WebConfig.StatsOpenEmailImageWidth), Convert.ToInt32(WebConfig.StatsOpenEmailImageHeight), PixelFormat.Format32bppArgb);
                MemoryStream memStrm = new MemoryStream();

                btMap.Save(memStrm, ImageFormat.Png);
                memStrm.WriteTo(context.Response.OutputStream);

Код после:

                using (Bitmap btMap = new Bitmap(Convert.ToInt32(WebConfig.StatsOpenEmailImageWidth), Convert.ToInt32(WebConfig.StatsOpenEmailImageHeight), PixelFormat.Format32bppArgb))
                {
                    using (MemoryStream memStrm = new MemoryStream())
                    {
                        btMap.Save(memStrm, ImageFormat.Png);
                        memStrm.WriteTo(context.Response.OutputStream);
                    }
                }

Это необходимо для оптимизации побейте утечка памяти?



1130
3
задан 25 августа 2011 в 03:08 Источник Поделиться
Комментарии
1 ответ

Абсолютно, 2-й пример-это способ обеспечить одноразовые предметы/ресурсы для GC. С помощью п. делает это путем соблюдения правила о том, что создаваемый объект должен быть унаследован от интерфейса IDisposable. На закрытии '}' каждого блока, используя объект уничтожается.

В первом примере, у вас будет утечка памяти происходит, если вы не закрываете и распоряжаться потоке MemoryStream.

2
ответ дан 25 августа 2011 в 03:08 Источник Поделиться