我创建了一个 C# 应用程序,它使用了 150mb 内存(私有字节),主要是由于字典很大:
Dictionary<string, int> Txns = new Dictionary<string, int>();
我想知道如何释放这段内存。我试过这个:
Txns = null;
GC.Collect();
但它似乎并没有对我的私人字节造成太大影响——它们从 155mb 下降到 145mb。
有什么线索吗?
Thanks
-edit-
好吧,我对这段代码的运气比较好(它使私有字节减少到 50mb),但为什么呢?
Txns.Clear(); // <- makes all the difference
Txns = null;
GC.Collect();
-edit-
对于每个说“不要使用 GC.collect”的人来说,这很公平(我不会争论这一点,除了说你可以看到我的 C 背景),但它并没有真正回答我的问题:
为什么如果我先清除事务列表,垃圾收集器才会释放内存?既然字典已经被取消引用,它不应该释放内存吗?
私有字节反映了进程的内存使用情况。当对象被收集时,相关的内存段可能会也可能不会释放给操作系统。 CLR 在操作系统级别管理内存,由于分配和释放内存不是免费的,因此没有理由立即释放每块内存,因为应用程序稍后可能会请求更多内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)