我正在为我的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;
}
也许有人有个主意,谢谢!
答案 0 :(得分:0)
将WeakReference.Target
设置为null
将释放对它的引用。在C#中没有破坏内存的东西。当没有对它的引用时,GC收集内存。即便如此,它还是决定何时释放它们。 GC.Collect强迫这一点。但这不是出于生产目的,除非你知道你正在做什么。