2010-05-16 24 views
6

Estoy usando EmguCV, el contenedor OpenCV para .NET. Estoy eliminando todos los objetos creados, pero mi aplicación todavía usa más y más memoria (también en la configuración de lanzamiento). He depurado mi aplicación con perfilador de memoria .NET y obtener este resultado:Emgu CV - pérdida de memoria (consumo de memoria)

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

todos los objetos cuenta de instancias se OSCILANTES pero counr ejemplo GCHandle va en aumento hasta que mi máquina es inutilizable. El recolector de basura no libera memoria (creo).

Estoy usando VS 2008 profesional, Win7 prof 32-bit, ambos actualizados, y la última versión estable de emguCV.

Puedo publicar algún código de aplicación, si me sirve de ayuda.

Gracias y lo siento por mi inglés. Martin

+1

OpenCV es muy desagradable cuando se trata de la eliminación de objetos. Yo diría que lo más probable es que no se deshaga de algo que debería desecharse. Ponga un código y tal vez podamos encontrar su error. – ubiquibacon

Respuesta

1

Eche un vistazo al siguiente enlace sobre cómo hacer la recolección automática de basura.
http://www.emgu.com/wiki/index.php/Working_with_Images
Tuve un problema similar y comencé a mejorar mi código utilizando las diferentes pautas en el enlace de arriba.
Saludos
Shivam

+0

Bueno, no dice mucho. Solo que necesita deshacerse manualmente (por ejemplo, con 'using') o esperar el GC. Y esa eliminación es mejor. – CodesInChaos

+0

Gracias, es una respuesta obvia. Captura de imagen a 100ms durante una hora ... Gracias. –

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(); 
    } 
}