Как правильно очистить память?

Из C# обращаюсь к библиотеке, написанной на плюсах и получаю хэндл на картинку.
Нужно ли в этом случае очищать память и как?
Или достаточно использовать метод Dispose() ?
class Program {
        [DllImport("IesRender.dll")]
        public static extern IntPtr RenderIes(string filename, int size, double intensity);

        static void Main(string[] args){
            string iesFile = Path.Combine(Application.StartupPath, "7862_5516-00_L038.IES");
            var imgHandle = RenderIes(iesFile, 256, 1.0);
            if (imgHandle != IntPtr.Zero)
            {
                Image im = Image.FromHbitmap(imgHandle );
                im.Save("drawing.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                im.Dispose();
            }         
        }
    }
  • Вопрос задан
  • 850 просмотров
Решения вопроса 1
AxisPod
@AxisPod
Ну т.к. у вас функция возвращает указатеть, IntPtr хранит указатель и никак не умеет чистить ресурсы. Значит у вас должна импортироваться еще и функция для очистки ресурса, которую и следует использовать. А в таком виде явная утечка, т.к. imgHandle ресурс неуправляемый и соответственно сборщиком мусора не очистится.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Neuroware
@Neuroware
Программист в свободное от работы время
в теории dispose должно быть достаточно, но это не гарантирует того, что не останется мусора, можно загрузить этот код бесконечный цикл и посмотреть на потребление памяти, если за пару минут память не утечет, то все нормально.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы