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

Из 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();
            }         
        }
    }
  • Вопрос задан
  • 838 просмотров
Решения вопроса 1
AxisPod
@AxisPod
Ну т.к. у вас функция возвращает указатеть, IntPtr хранит указатель и никак не умеет чистить ресурсы. Значит у вас должна импортироваться еще и функция для очистки ресурса, которую и следует использовать. А в таком виде явная утечка, т.к. imgHandle ресурс неуправляемый и соответственно сборщиком мусора не очистится.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Neuroware
@Neuroware
Программист в свободное от работы время
в теории dispose должно быть достаточно, но это не гарантирует того, что не останется мусора, можно загрузить этот код бесконечный цикл и посмотреть на потребление памяти, если за пару минут память не утечет, то все нормально.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы