10

.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 にその参照を強制的に収集させる方法はありますか?

前もって感謝します。

4

2 に答える 2