相关疑难解决方法(0)

如何编写单元测试来确定对象是否可以进行垃圾回收?

关于我之前的问题,我需要检查一下将由Castle Windsor实例化的组件,在我的代码使用完之后是否可以进行垃圾回收.我在前一个问题的答案中尝试了这个建议,但它似乎没有按预期工作,至少对我的代码而言.所以我想编写一个单元测试来测试在我的一些代码运行之后是否可以对特定对象实例进行垃圾回收.

这有可能以可靠的方式进行吗?

编辑

我目前根据Paul Stovell的答案进行了以下测试,该答案成功:

     [TestMethod]
    public void ReleaseTest()
    {
        WindsorContainer container = new WindsorContainer();
        container.Kernel.ReleasePolicy = new NoTrackingReleasePolicy();
        container.AddComponentWithLifestyle<ReleaseTester>(LifestyleType.Transient);
        Assert.AreEqual(0, ReleaseTester.refCount);
        var weakRef = new WeakReference(container.Resolve<ReleaseTester>());
        Assert.AreEqual(1, ReleaseTester.refCount);
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Assert.AreEqual(0, ReleaseTester.refCount, "Component not released");
    }

    private class ReleaseTester
    {
        public static int refCount = 0;

        public ReleaseTester()
        {
            refCount++;
        }

        ~ReleaseTester()
        {
            refCount--;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我是否正确地假设,基于上述测试,我可以得出结论,使用NoTrackingReleasePolicy时Windsor不会泄漏内存?

.net c# garbage-collection unit-testing

36
推荐指数
1
解决办法
6685
查看次数

标签 统计

.net ×1

c# ×1

garbage-collection ×1

unit-testing ×1