Ben, I (WeakReferences kullanarak) emin bazı nesneler artık başvurulan değildi yapmak için testler koşuyordu .NET 4.x WeakReferences ile ilgili bir sorun var ve ben davranış çerçeve sürümleri arasında tutarlı değildir fark ettik:Tam çöp toplama .NET 4.x'te nasıl zorlanır?
using System;
using System.Text;
using NUnit.Framework;
[TestFixture]
public class WeakReferenceTests
{
[Test]
public void TestWeakReferenceIsDisposed()
{
WeakReference weakRef = new WeakReference(new StringBuilder("Hello"));
GC.Collect();
GC.WaitForPendingFinalizers();
GC.WaitForFullGCComplete();
GC.Collect();
var retrievedSb = weakRef.Target as StringBuilder;
Assert.That(retrievedSb, Is.Null);
}
}
Sonuçlar:
.NET 2.0 PASS
.NET 3.0 FAIL
.NET 3.5 PASS
.NET 4.0 FAIL
.NET 4.5 FAIL
bu yerde belgelenen mı?
GC'yi bu başvuruyu .NET 4.5'te toplamaya zorlamanın bir yolu var mı?
Şimdiden teşekkürler.
Sadece bir not: GC ayıklama modunda ulaşılamaz nesneleri toplamaz ben
Debug.Assert
için basit çağrı ile testini değiştirirseniz kod çerçevesinin tüm sürümleri için benim makine üzerinde çalışıyor. – 2kayTeşekkür ederiz – Guillaume86
Hmm içine bakacağım, gördüğünüz kod çerçevenin tüm sürümlerinde bana çalışır. (Eh, NUnit yüklü değil, ben sadece 'Debug.Assert' kullanıyorum ama bu davranışını değiştirmemeliyim.) –