Chciałbym sprawdzić, czy kod konfigurujący WeakReference
nie zawiera przypadkowo silnego odniesienia do obiektu, do którego się odwołuje. (Oto an example, jak łatwo jest to zrobić przypadkowo.)Testowanie/weryfikacja słabej referencji
Czy to wygląda na najlepszy sposób na sprawdzenie niezamierzonych silnych odniesień?
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);
Nie można oczekiwać GC.Collect(), aby wymusić GC do zbierania śmieci, to tylko sugestia, więc nie może usunąć obiekt. [Automatyczne gromadzenie pamięci w .Net] (http://msdn.microsoft.com/en-us/library/f144e03t.aspx) –
Czy mógłbyś zastanowić się, dlaczego GC.Collect() może nie zniszczyć obiektu, który kwalifikuje się do kolekcja? –
Apparantly wymusza w trybie domyślnym. Dopiero wtedy, gdy jest ustawiony w trybie zoptymalizowanym, tak się nie stało, nie zdawałem sobie z tego sprawy. –