我构建了一个快速程序,它需要遍历一个巨大的日志文件(几百万条记录)并从内部找到各种零碎的东西。由于数据量如此之大,我一直好奇地查看我的 Windows 任务管理器性能选项卡,看看使用了多少 CPU 和内存。
程序成功获得我的结果后,CPU 使用率明显下降。但是在看到我的内存使用量在执行过程中缓慢上升到几 GB 之后,它保持不变。
我试图在我的函数结束时调用 GC.Collect(),尝试将事情设置为 null,尝试在 Release 模式下运行程序(我听说 GC.Collect() 可能无法像我希望的那样在调试中工作模式)。
如果我关闭程序,内存使用量会立即下降,但我不明白为什么我不能在应用程序生命周期内清理我的应用程序。归根结底,这是一个一次性应用程序,但我只是想知道我错过了什么,即是什么保留了所有这些内存。
想法?
最佳答案
调用 GC.Collect() 只是收集垃圾的请求,而不是命令,因此 CLR 可能会选择忽略该请求(如果它认为合适)。
例如,如果有大量垃圾在收集时会导致明显的延迟,但仍有可用内存为后续分配提供服务,那么 GC 可能会选择忽略您的请求。
关于.net - 垃圾收集不会减少当前的内存使用量 - 在 Release模式下。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/888280/