Tengo una aplicación de WindowsForms que parece perder memoria, así que utilicé ANTS Memory Profiler de Redgate para mirar los objetos que sospecho y descubrí que solo los tienen los objetos que ya están en el Finalizer Queue. Genial, ¿qué es exactamente la cola de finalizadores? ¿Puedes señalarme la mejor definición? ¿Puedes compartir algún consejo anecdótico?¿Cuáles son los Finalizer Queue y Control + ThreadMethodEntry?
Además, todos los objetos raíz de GC en la cola de finalizador son instancias de System.Windows.Forms.Control + ThreadMethodEntry objetos denominados "llamador". Veo que está involucrado en la interacción de UI de múltiples hilos, pero no sé mucho más que eso. Perdona mi aparente flojera y admitido mi ignorancia, pero estos recursos están enterrados dentro del componente de un proveedor. Estoy hablando con el proveedor sobre estos problemas, pero necesito alguna dirección para ponerme al día con la conversación. ¿Puede indicarme la definición más útil de ThreadMethodEntry también? ¿Algún consejo anecdótico?
Además, ¿debería preocuparme por estos objetos en la cola del finalizador?
Actualización: Este Red Gate article fue útil.
Gracias por la gran respuesta, Paul. Ese es el gráfico de referencia del objeto del que estoy hablando, mirando los objetos nuevos en la segunda instantánea, después de que los recursos se limpien. Todos los objetos en el gráfico que implementan IDisposable tienen una información sobre herramientas que dice "Se ha llamado a Dispose() para este objeto", pero el objeto seleccionado no tiene dicha información sobre herramientas. – flipdoubt
Nota sobre ThreadMethodEntry: creo que se usan en cualquier invocación al subproceso de interfaz de usuario. Cada objeto Control tiene una cola de devolución de llamadas de tipo ThreadMethodEntry. Una devolución de llamada dequeues ThreadMethodEntry y lo ejecuta. Cada objeto ThreadMethodEntry tiene varios campos internos. El examen de estos campos puede ayudarlo a determinar cuáles de los objetos de este proveedor están invocando. No recuerdo si puede obtener esa información de ANTS, pero sé que puede hacerlo a través de WinDbg.dll y sos.dll (extensiones del depurador gestionado). Mire el delegado "método" y el control "llamador". –
Además, tenga en cuenta que los objetos ThreadMethodEntry implementan un finalizador, pero no tienen un método Dispose. Cuando completen, también se moverán a la cola del finalizador. –