我经常在相同的几个文件上使用File.ReadLines()并且不知道以这种方式读取文件的开销吗?
我在txt文件中搜索每个文件ID(哈希)。
目前我正在使用此代码,但想知道是否应该缓存这些索引文件。我犹豫的是,文件将经常被编辑,以至于每次重新加载文件到缓存都会导致同样多的性能损失。我更有可能在每次迭代时向文本文件添加一行(不会有匹配)。
ENV USERID
RUN usermod -u $USERID www-data
在不同的路径上有大约5-10个index.txt文件需要根据文件进行检查...所以每个都需要缓存。
缓存index.txt文件更好吗? File.ReadLines()有很多开销吗?
感谢您的任何指示。
答案 0 :(得分:2)
如果
// 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")) {
}
}
比较两种实现 - 当前的 - 和 - 此缓存例程,然后决定是否要缓存。
答案 1 :(得分:0)
我会推荐以下内容:
在内存中存储每个哈希文件的最后更新时间戳
缓存哈希文件的内容
访问缓存时,检查文件的上次更新时间戳是否大于存储在内存中的时间戳。
使用ConcurrentDictionary而不是Dictionary。