2010-05-16 3 views
6

Я использую EmguCV, оболочку OpenCV для .NET. Я удаляю все созданные объекты, но мое приложение все еще использует все больше и больше памяти (в конфигурации выпуска тоже). Я отлажена мое приложение с помощью профилировщика .NET памяти и получить этот результат:Emgu CV - утечка памяти (потребление памяти)

http://img532.imageshack.us/img532/2503/screenqv.png

все объекты подсчет экземпляра oscilating но GCHandle экземпляр counr увеличивается, пока моя машина не является непригодной для использования. Сборщик мусора не выпускает память (я думаю).

Я использую VS 2008 профессиональный, Win7 prof 32-разрядный, как обновленный, так и последний стабильный вариант emguCV.

Я могу опубликовать код приложения, если это поможет.

Спасибо и извините за мой английский. Martin

+1

OpenCV очень противно, когда дело доходит до утилизации объектов. Я бы сказал, что вы, скорее всего, не распоряжаетесь чем-то, что нужно утилизировать. Поместите код и, возможно, мы сможем найти вашу ошибку. – ubiquibacon

ответ

1

Посмотрите на приведенную ниже ссылку о том, как сделать автоматическую сборку мусора.
http://www.emgu.com/wiki/index.php/Working_with_Images
У меня была аналогичная проблема, и я начал улучшать свой код, используя различные рекомендации по ссылке выше.
С уважением
Шивам

+0

Ну, это не говорит много. Только вам нужно либо вручную распоряжаться (например, с помощью 'use'), либо ждать GC. И это Disposing лучше. – CodesInChaos

+0

Спасибо, это очевидный ответ. Захват изображения при 100 мс в течение часа ... Спасибо. –

0
public static class IImageExtensions 
{ 
    // http://stackoverflow.com/questions/20825497/difference-between-using-and-dispose-call-in-c-sharp 
    public static void FreeMem(this IImage image) 
    { 
     using (image) 
     { 
      using (image.Bitmap) 
      { 

      } 
     } 
     //image.Bitmap.Dispose(); 
     //image.Dispose(); 
    } 
} 
Смежные вопросы