Tengo un .NET System.Threading. Temporizador de temporizador que marca cada 60 segundos e introduce una pérdida de memoria en cada tic.Cuando mi temporizador marca ... .NET Memory Leak
En cada tic del temporizador, el código asigna un objeto IDisposable (llamado SocketsMessageConnector) ... pero lo desecho correctamente.
Ejecuté .NET Memory Profiler y cada 60 segundos veo una nueva instancia de mi clase SocketsMessageConnector en la memoria (así que después de 15 minutos, tengo 15 instancias). El perfilador de memoria verifica que la instancia está de hecho dispuesta, pero muestra la instancia rooteada por un TimerCallback, que está rooteado por un _TimerCallback, que está rooteado por un GCH y ...
¿Qué hay aquí? ¿Por qué el TimerCallback se mantiene en la nueva instancia creada en cada temporizador?
PS. El generador de perfiles fuerza 2 GC antes de tomar una instantánea, por lo que sé que ES de hecho una fuga y no solo una optimización por parte del GC.
¿Puede publicar algún código para que podamos ver? – Nate
Leí la pregunta y pensé: "A medida que mi temporizador gotea suavemente" –