2009-07-17 8 views
6

¿Existen herramientas buenas (y gratuitas) para analizar la fuente estática o ejecutar programas para ayudar a detectar fugas de memoria?Prueba de fugas de memoria en aplicaciones .NET

He creado algunos servicios de Windows y quiero asegurarme de que no consumirán memoria si los dejo funcionando durante semanas.

+1

¿El recolector de basura no los levantará? – James

+1

No si mantiene referencias a ellos alrededor. Por ejemplo: puede suceder si está creando objetos con eventos y luego adjunta controladores de eventos. Si no quita el controlador de eventos, el objeto no se limpiará. –

+0

El tipo de fuga que necesita buscar son los objetos que siguen creciendo en tamaño, donde guarda una referencia al objeto que está por ahí. Además, podría tener errores en su código relacionados con recursos no administrados que quisiera detectar, y ha habido al menos un error en el tiempo de ejecución de .NET relacionado con eso (el método CopyFromScreen pierde 1 identificador cada vez), así que supongo que quiere verificar cosas así. –

Respuesta

2

No cumple con sus requisitos de ser libre, pero hay uno por Red Gate Creo que vale la pena lo que sugiere - ANTS Memory Profiler

He usado un número de sus herramientas antes (algunos en juicio, algunos hemos comprado) y los encontraron muy buenos.

0

Profile Sharp es una (de código abierto) el rendimiento y la memoria de perfiles libre para .NET

1

dejar correr el servicio y el uso del monitor de rendimiento para recopilar información sobre el uso de memoria del servicio. Además, si usa recursos no administrados, asegúrese de que su código disponga de estos recursos de manera adecuada usando IDisposable. En un entorno no administrado, puede tener fugas fácilmente simplemente olvidando lanzar punteros, pero eso no es posible en un entorno administrado. Sin embargo, si sigue asignando objetos nuevos y conserva referencias a ellos para que no se puedan recolectar basura, su servicio requerirá más y más memoria.

0

No olvide que puede usar el Administrador de tareas de Windows para detectar al menos la presencia de pérdidas de memoria en su servicio.

Otra forma de utilizar el Administrador de tareas para realizar un seguimiento de los objetos que se cambie a la pestaña Procesos, y luego ir a Ver>Seleccionar columnas y comprobar objetos de usuario y objetos GDI (GDI, probablemente, no es útil para usted desde que está ejecutando un Servicio, pero otros pueden encontrarlo útil.)