gpt4 book ai didi

c# - 为什么我必须显式调用 GC 收集?

转载 作者:太空狗 更新时间:2023-10-29 23:59:00 25 4
gpt4 key购买 nike

我创建了一个示例 C# 控制台应用程序,它读取字节数组中的文件数据并将字节数组转换为十六进制字符串。它需要大量内存,并且在工作完成后不会释放内存,我也在使正在使用的变量无效。

示例代码如下:

string filename = @"F:\\AVSEQ09.DAT"; //file size is 32 MB
string hexData = null;

byte[] fileDataContent = File.ReadAllBytes(filename);
if (fileDataContent != null)
hexData = BitConverter.ToString(fileDataContent);
fileDataContent = null;
hexData = null;

//GC.Collect();
Console.ReadKey();

如果我运行这段代码,它需要 433 MB 的专用工作集,如果我取消注释 GC.collect 调用,内存将减少到 6 MB。为什么我必须显式调用 GC.collect,显式调用 GC.collect 不好,如何在不调用 GC.collect 的情况下释放内存(至 6 MB)?

最佳答案

Garbage collection is the simulation of infinite memory on a machine with finite memory ,通过回收有效程序无法注意到的内存丢失。

以上是一个非常重要的概念,因为除其他外,它强调了这样一个事实,即垃圾收集器不必做任何事情,只要它可以在您的程序每次请求时提供内存即可

它可能不是最可控的内存管理系统,但如果您的程序在内存压力下结束,CLR 通常会自动启动垃圾回收周期以减轻一些压力。当系统似乎没有压力时,延迟收集,以避免频繁不必要的暂停。

关于c# - 为什么我必须显式调用 GC 收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16142182/

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