Me gustaría verificar que el código que configura un WeakReference
no guarde accidentalmente una referencia fuerte al objeto al que se hace referencia. (Aquí está an example de cómo es fácil hacerlo accidentalmente).Probar/Verificar una WeakReference
¿Es esta la mejor manera de verificar si hay referencias fuertes inadvertidas?
TestObject testObj = new TestObject();
WeakReference wr = new WeakReference(testObj);
// Verify that the WeakReference actually points to the intended object instance.
Assert.Equals(wr.Target, testObject);
// Force disposal of testObj;
testObj = null;
GC.Collect();
// If no strong references are left to the wr.Target, wr.IsAlive will return false.
Assert.False(wr.IsAlive);
no se puede esperar GC.Collect(), para obligar a la GC para recoger la basura, es sólo una sugerencia, lo que no podría extraer el objeto. [Colección de memoria automática en .Net] (http://msdn.microsoft.com/en-us/library/f144e03t.aspx) –
¿Le importaría explicar por qué GC.Collect() podría no destruir un objeto que sea elegible para ¿colección? –
Aparece forzosamente en modo predeterminado. Solo cuando está configurado en modo optimizado no funciona, no me di cuenta. –