【发布时间】:2010-10-23 20:17:59
【问题描述】:
我创建了一个 c# 应用程序,它占用了 150mb 的内存(私有字节),主要是因为字典很大:
Dictionary<string, int> Txns = new Dictionary<string, int>();
我想知道如何释放这个内存。我试过这个:
Txns = null;
GC.Collect();
但这似乎并没有对我的私人字节造成太大影响——它们从 155mb 下降到 145mb。 有什么线索吗?
谢谢
-编辑-
好吧,我对这段代码有更多的运气(它将私有字节减少到 50mb),但为什么呢?
Txns.Clear(); // <- makes all the difference
Txns = null;
GC.Collect();
-编辑-
好吧,对于所有说“不要使用 GC.collect”的人来说,这很公平(我不打算对此进行辩论,只是说你可以看到我的 C 背景),但它并没有真正回答我的问题: 如果我先清除事务列表,为什么垃圾收集器只会释放内存?既然字典已被取消引用,它不应该释放内存吗?
【问题讨论】:
-
GC.Collect() 并不强制在那个时候收集所有可以收集的内存,因为垃圾收集是一个多步骤的过程。我可能会添加一个过程,您通常甚至不需要知道有关...的详细信息
-
是否需要将Txns设置为null,会有什么不同吗?还是只清除内容就足够了(释放内存)?
标签: c# .net memory memory-leaks profiling