【发布时间】:2015-02-26 15:38:09
【问题描述】:
我正在为我的 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;
}
也许有人有想法,谢谢!
【问题讨论】:
-
在 .NET 中,您不会“销毁”对象。你让他们逗留,让 GC 完成它的工作。你最好的办法是现在销毁这个“小内存管理器”。
-
@HenkHolterman 好的,我会寻找新的解决方案。因为我的应用程序内存增加得非常糟糕,而且似乎 GC 在检测关闭的选项卡方面存在一些问题。或者我需要在“关闭选项卡”事件中处理所有事情。谢谢!
-
Dispose() 是关于资源,而不是关于内存。确保您首先了解问题所在。
-
直到 OutOfMemory 异常。该应用程序通常达到 2GB 的内存。
-
好的,这是个问题。现在找出原因。查找“内存分析器”。我们无法帮助您,afaik 选项卡不会关闭。
标签: c# weak-references destroy typedreference