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

时间:2016-04-11 14:25:37

标签: c# performance caching

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

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

目前我正在使用此代码,但想知道是否应该缓存这些索引文件。我犹豫的是,文件将经常被编辑,以至于每次重新加载文件到缓存都会导致同样多的性能损失。我更有可能在每次迭代时向文本文件添加一行(不会有匹配)。

ENV USERID 
RUN usermod -u $USERID www-data

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

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

感谢您的任何指示。

2 个答案:

答案 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)

我会推荐以下内容:

  1. 在内存中存储每个哈希文件的最后更新时间戳

  2. 缓存哈希文件的内容

  3. 访问缓存时,检查文件的上次更新时间戳是否大于存储在内存中的时间戳。

  4. 使用ConcurrentDictionary而不是Dictionary。