.net - 垃圾收集不会减少当前的内存使用量 - 在 Release模式下。为什么?

标签 .net garbage-collection

我构建了一个快速程序,它需要遍历一个巨大的日志文件(几百万条记录)并从内部找到各种零碎的东西。由于数据量如此之大,我一直好奇地查看我的 Windows 任务管理器性能选项卡,看看使用了多少 CPU 和内存。

程序成功获得我的结果后,CPU 使用率明显下降。但是在看到我的内存使用量在执行过程中缓慢上升到几 GB 之后,它保持不变。

我试图在我的函数结束时调用 GC.Collect(),尝试将事情设置为 null,尝试在 Release 模式下运行程序(我听说 GC.Collect() 可能无法像我希望的那样在调试中工作模式)。

如果我关闭程序,内存使用量会立即下降,但我不明白为什么我不能在应用程序生命周期内清理我的应用程序。归根结底,这是一个一次性应用程序,但我只是想知道我错过了什么,即是什么保留了所有这些内存。

想法?

最佳答案

调用 GC.Collect() 只是收集垃圾的请求,而不是命令,因此 CLR 可能会选择忽略该请求(如果它认为合适)。

例如,如果有大量垃圾在收集时会导致明显的延迟,但仍有可用内存为后续分配提供服务,那么 GC 可能会选择忽略您的请求。

关于.net - 垃圾收集不会减少当前的内存使用量 - 在 Release模式下。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888280/

相关文章:

c# - httpclient PostAsJsonAsync方法未找到.net框架4并行解决方案

c - 应该如何在 Ruby 扩展中对 VALUE* 数组进行标记?

c# - GC.SuppressFinalize 有保证吗?

javascript - 垃圾收集器是否会从 NodeJS 内存中清除过时的所需模块?

许多短期对象的 Java 垃圾收集行为

c# - 优化C#中的字符串比较

.net - 有没有办法以编程方式提取接口(interface)?

c# - 一个程序集中的多个服务。安装程序如何知道要安装和启动哪个服务?

.net - 关于创建可定制触摸屏应用程序的建议

ruby - Ruby2.0 中 GC.stat 指标的持续时间是多少