Estoy trabajando en un gran proyecto que tiene muchas clases y esas clases tienen referencias entrantes. Antes de usar .NET Framework, usábamos la clase WeakReference para ver si el objeto se desechaba. Recientemente, migramos nuestro proyecto a .net core 5 y, de repente, la prueba con la prueba de eliminación de objetos comenzó a fallar. Después de investigar un poco (bastante en realidad), descubra que WeakReference no funciona de la misma manera que en .NET Framework.
Student student = new Student(); WeakReference weakRef = new WeakReference(student); student.Dispose(); student = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); var isAlive = weakRef.IsAlive;¿Alguna idea de cómo puedo probar si el objeto se desechó correctamente? Podría poner algún tipo de registro en el método de eliminación, pero eso aún no garantiza que el objeto se elimine. El propósito de la pregunta no es probar si .net core desecha mi objeto, me gustaría saber si hay otros objetos que hacen referencia a él que impiden que el objeto sea desechado.
PD: También puse Thread.Sleep with while loop para ver si el objeto se desechará más tarde, pero eso no sucedió incluso después de 30 minutos.
Intenté usar JetBrains dotMemoryUnit, y eso también actuó igual que WaekReference. Es una gran herramienta que muestra todos los problemas y eliminar el problema es muy rápido.