.NET 4.x の WeakReferences に問題があります。テストを実行して、一部のオブジェクトが (WeakReferences を使用して) もう参照されていないことを確認していましたが、フレームワークのバージョン間で動作が一貫していないことに気付きました。
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);
}
}
結果:
.NET 2.0 PASS
.NET 3.0 FAIL
.NET 3.5 PASS
.NET 4.0 FAIL
.NET 4.5 FAIL
これはどこかに文書化されていますか?
.NET 4.5 で GC にその参照を強制的に収集させる方法はありますか?
前もって感謝します。