我创建了一个示例 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)?