破坏WeakReference的目标

时间:2014-12-30 13:02:23

标签: c# weak-references destroy typedreference

我正在为我的WPF应用程序编写一个小型MemoryManager,并且遇到了以下问题。

我的所作所为:我在WeakReference中将大量实例存储为IList<WeakReference>。后来,当我想释放所有内存时,我想要销毁列表中的所有活动对象。

为此,我尝试获取对象的引用,如下所示:

foreach (WeakReference wr in references)
{
    if (wr.IsAlive == true)
    {
        if(wr.Target != null)
        {
            TypedReference tf = __makeref(wr.Target);
        }
    }
}

但我不知道如何销毁 tf 。我尝试使用__refval,但它对我不起作用。

示例

InstanceDestructManager idm = new InstanceDestructManager();
IList<string> test = new List<string>();
test.Add("123");

idm.AddNullable<IList<string>>(ref test);
idm.Dispose();

// Should not be possible, because after idm.Dispose "test" should be null
test.Add("456");

的常规代码:

public static void Test(ref object pa)
{
    pa = null;
}

也许有人有个主意,谢谢!

1 个答案:

答案 0 :(得分:0)

WeakReference.Target设置为null将释放对它的引用。在C#中没有破坏内存的东西。当没有对它的引用时,GC收集内存。即便如此,它还是决定何时释放它们。 GC.Collect强迫这一点。但这不是出于生产目的,除非你知道你正在做什么。