gpt4 book ai didi

C# 缓存 txt 文件或使用 File.ReadLines

转载 作者:行者123 更新时间:2023-11-30 23:27:28 27 4
gpt4 key购买 nike

我经常对相同的几个文件使用 File.ReadLines() 并且不知道以这种方式读取文件的相关开销?

我正在搜索一个 txt 文件中的每个文件 ID(哈希)。

目前我正在使用这段代码,但想知道是否应该缓存这些索引文件。我的犹豫是,文件将被如此频繁地编辑,以至于每次将文件重新加载到缓存中都会对性能造成同样大的影响。我更有可能在每次迭代时向文本文件添加一行(不会有匹配项)。

foreach (var myfile in allfiles) // roughly 5 thousand
{
...

foreach (var line in File.ReadLines(myfile.path + "\index.txt"))
{
// compare the line to the current record's hash
if (myfile.hash.equals(line))
...
return x;

}
...
// otherwise add a new line (a hash) to index.txt
}

...

在不同的路径下大约有 5-10 个 index.txt 文件需要根据文件进行检查...因此每个文件都需要缓存。

缓存 index.txt 文件是更好的主意吗? File.ReadLines() 是否有很多开销?

感谢您的指点。

最佳答案

如果您有许多足够短的文件,缓存看起来是合理的:

  // Simplest, not thread safe
private static Dictionary<String, String[]> s_Files =
new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);

private static IEnumerable<String> ReadLines(String path) {
String[] lines;

if (s_Files.TryGetValue(path, out lines))
return lines;
else {
lines = File.ReadAllLines(path);

s_Files.Add(path, lines);

return lines;
}
}

...

foreach (var myfile in allfiles) {
...
// Note "ReadLines" insread of "File.ReadLines"
foreach (var line in ReadLines(myfile.path + "\index.txt")) {
}
}

比较两个实现 - 你当前的实现 - 和 - 这个缓存的例程,然后决定你是否想要缓存。

关于C# 缓存 txt 文件或使用 File.ReadLines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551512/

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