Analizo un proyecto de VB.NET y hay algunos objetos (formulario MDI infantil) que se eliminan pero no se eliminan con el GC.Controlador de eventos y pérdidas de memoria
El análisis MemoryProfiler encuentran, entre otros, los siguientes:.
"Esta instancia está dispuesto y todavía indirectamente arraigados por un manejador de sucesos A menudo, esto indica que el manejador de sucesos no ha sido adecuadamente eliminado y es una causa común de pérdidas de memoria. Los ejemplos a continuación son directamente arraigado por manejador de sucesos (s). a investigar para obtener más información sobre este problema ..."
Ahora, trato de descubrir qué debería significar esto y cómo solucionarlo.
Tengo un formulario MDI y un formulario hijo. El GC no recoge el formulario secundario después de abrir/cerrar, aparentemente porque permanece inmóvil (¿indirectamente?) Referenciado por MDIForm EventHandlerList
...
¿Qué puede ser y cómo puedo solucionarlo?
probé el corrección recomendada en this thread, porque tenía un problema con la referencia MDI en el PropertyStore
, ahora esto eliminó, pero apareció la referencia MDI EventHandlerList
a la forma infantil ...
Después de un análisis de código I observado algunos
AddHandler newMenu.Click, AddressOf ClickMenu
sin precedentes con RemoveHandler newMenu.Click, AddressOf ClickMenu
. ¿Podría ser la causa principal?
Y, a propósito, es el Handles
Private Sub ClickMenu(sender as Object, e as EventArgs) Handles newMenu.Click
mejor que
RemoveHandler newMenu.Click, AddressOf ClickMenu
AddHandler newMenu.Click, AddressOf ClickMenu
desde el punto de vista de la asignación de memoria?
Un fragmento del código puede ayudar. En particular, los controladores de eventos de agregar y quitar y eliminar el código. –
¿Llamar a GC.Collect() después de la eliminación hace alguna diferencia? El hecho de que algo se elimine no siempre significa que es basura recogida de inmediato. – Ian
También ... ¿esto es realmente un problema? Leer un foro al que te has vinculado sugiere que esto no empeorará con el tiempo. ¿Algunos de los microbits filtrados a través del código MS van a tener un gran impacto? – Ian