2011-06-03 10 views
7

Nuestra aplicación .Net 4.0 tiene una fuga que hace que se bloquee después de un uso prolongado. Tras investigar, determiné que los "objetos del usuario" estaban goteando. Un objeto de usuario es un recurso ventanas como se describe aquí:Cómo encontrar una fuga en objetos de usuario

http://msdn.microsoft.com/en-us/library/ms725486%28v=VS.85%29.aspx

Windows asigna 10.000 objetos de usuario por proceso. Otros recursos de Windows como objetos GDI y Handles son constantes mientras se ejecuta la aplicación.

Encontré una pregunta similar para C++, donde la solución requería descargar un paquete llamado "desvíos" de microsoft reseach - ¿la trampa? $ 10K.

El uso del analizador de memoria Ant, I SOSPECHO, tiene que ver con los menús. Estamos utilizando menús de SyncFusion, por lo que el ciclo de vida de las cosas relacionadas con los menús no se puede encontrar mirando en el código. Así que esto puede ser un error que SynFusion debe resolver.

¿Alguien tiene una fuga similar usando los menús de SyncFusion? Las hormigas me dicen que algunos objetos PopupMenu se quedan pegados, pero Ants no da información sobre cómo encontrar dónde se crean los objetos (y así determinar dónde desecharlos).

El leakTrap/Dotours mencionado en la publicación anteriormente mencionada SO parece interesante porque parece atrapar las llamadas específicas a la asignación de objetos USER.

sugerencias son bienvenidas

+0

Comenzaré a mirar los menús que crea en el código usted mismo. Tal vez la creación de menús con el botón derecho en un evento 'onchange' o algo así como sobreescribir otro de sus menús. He tenido filtraciones con Syncfusion Edit en el pasado y, mientras las resolvía, parecía que era bastante estricto para deshacerse de ellas correctamente. –

Respuesta

1

si sabe menús están dando vueltas que debe ser capaz de enumerar los objetos GDI para su proceso y los nurf con DeleteMenu().

Windows debe notificar a su ventana principal cuando se muestran y cierran los menús emergentes, por lo que sería el lugar perfecto para tomar instantáneas de los identificadores de menú GDI y eliminar el más nuevo.

su fuerza bruta bastante y no se recomienda para .NET en hacer este tipo de manipulación GDI de bajo nivel es quizás traviesa

Me gustaría hacer una aplicación de prueba simple con menús Syncfusion para probar el punto y si el problema persiste póngase en contacto con el proveedor

Cuestiones relacionadas