Vorrei verificare che il codice che imposta un WeakReference
non contenga accidentalmente un riferimento forte all'oggetto di riferimento. (Ecco an example di come è facile farlo accidentalmente.)Test/verifica di un debole riferimento
Questo sembra il modo migliore per verificare la presenza di forti riferimenti involontari?
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);
Non si può pretendere GC.Collect(), per forzare il GC per la raccolta dei rifiuti, è solo un suggerimento, quindi potrebbe non rimuovere l'oggetto. [Raccolta automatica della memoria in .Net] (http://msdn.microsoft.com/en-us/library/f144e03t.aspx) –
Ti dispiacerebbe elaborare il motivo per cui GC.Collect() non può distruggere un oggetto idoneo per collezione? –
Apparentemente impone in modalità predefinita. È solo quando è impostato in modalità ottimizzata che non lo è, non me ne sono reso conto. –