gpt4 book ai didi

c# - 在 C# 中显式释放内存

转载 作者:IT王子 更新时间:2023-10-28 23:28:41 34 4
gpt4 key购买 nike

我创建了一个 c# 应用程序,它使用了 150mb 的内存(私有(private)字节),主要是由于一个大字典:

Dictionary<string, int> Txns = new Dictionary<string, int>();

我想知道如何释放这个内存。我试过这个:

Txns = null;
GC.Collect();

但这似乎并没有对我的私有(private)字节造成太大影响——它们从 155mb 下降到 145mb。有什么线索吗?

谢谢

-编辑-

好吧,我对这段代码有更多的运气(它将私有(private)字节减少到 50mb),但为什么呢?

Txns.Clear(); // <- makes all the difference
Txns = null;
GC.Collect();

-编辑-

好吧,对于所有说“不要使用 GC.collect”的人来说,这很公平(我不会对此进行辩论,只是说你可以看到我的 C 背景),但它并没有真正回答我的问题:如果我先清除事务列表,为什么垃圾收集器只会释放内存?既然字典已被取消引用,它不应该释放内存吗?

最佳答案

私有(private)字节反射(reflect)进程的内存使用情况。收集对象时,相关的内存段可能会或可能不会释放给操作系统。 CLR 在操作系统级别管理内存,由于分配和释放内存不是免费的,因此没有理由立即释放每 block 内存,因为应用程序稍后可能会请求更多内存。

关于c# - 在 C# 中显式释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/823661/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com