gpt4 book ai didi

c# - GC经常触发这个正常吗?

转载 作者:行者123 更新时间:2023-11-30 19:38:01 26 4
gpt4 key购买 nike

今天我注意到我制作的一个小程序在程序生命周期的前 10 到 20 秒内经常触发 GC。之后它几乎不会再次触发。 enter image description here

这段时间内只有1个函数运行,就是下面这个。获取 ~2k 的文件路径,并过滤掉其中的大部分。

 public static string[] FilterFiles(string path)
{
// Fetch the files from given directory
var files = Directory.GetFiles(path);

// Delete all files that are to small
foreach (string file in files)
{
string fullFile = default(string);

try
{
fullFile = File.ReadAllText(file);
}
catch
{
continue;
}

if (fullFile.Length < Settings.MinimumFileSize)
{
File.Delete(file);
}
}

// Obtain the new list without the small files
List<string> cleanFiles = new List<string>(Directory.GetFiles(path));
List<string> cleanReturn = new List<string>(Directory.GetFiles(path));

// Remove files we have handled before
foreach (string file in cleanFiles)
{
if (File.Exists(Settings.ExtractFolder + "\\" + file.Substring(file.LastIndexOf('\\') + 1) + "_Extract.xml"))
{
cleanReturn.Remove(file);
}
}

return cleanReturn.ToArray();
}

这段时间GC频繁触发这个正常吗?

最佳答案

嗯,是的。您正在创建大量生命周期较短的对象,并且会尽快处理这些对象。

尽量不要阅读整个文件。相反,只是 get the FileInfo to get the file size .

这里你枚举了两次目录列表,这也是不必要的:

List<string> cleanFiles = new List<string>(Directory.GetFiles(path));
List<string> cleanReturn = new List<string>(Directory.GetFiles(path));

同样在这里,由于字符串连接而创建了大量字符串:

Settings.ExtractFolder + "\\" + file.Substring(file.LastIndexOf('\\') + 1) + "_Extract.xml"

在那里使用 StringBuilderstring.Format,并尽可能在前面做。

关于c# - GC经常触发这个正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35551250/

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