读取多个文件会导致内存问题?

时间:2017-03-23 05:19:53

标签: c# file memory memory-management foreach

我正在搜索系统上的许多文件,以查找我正在编写的计算机搜索程序中的文本。但是,当读取较大的文件时,这些行保留在内存中,使其超过GB的ram使用率。我想知道问题是什么。这是我的代码。

    private int SearchInFile(SearchResult searchResult, Options options) {
        if (searchQuery.inFile.Length == 0) return -1;
        if (!options.searchOnlyInTextFiles || searchResult.type.Equals(".txt")) {
            try {
                int index = 0;
                foreach(string line in File.ReadLines(searchResult.path)) {
                    index++;
                    if (line.Contains(searchQuery.inFile)) return index;
                }
            } catch(Exception e) {
                Console.WriteLine(e);
            }
        }
        return -1;
    }

1 个答案:

答案 0 :(得分:0)

您应该像FileStream一样打开一个流,并且一次只能读取1024个字节。您应检查字节,并仅在RAM中构建当前行,直到找到新的行字符,然后在该行中查找您要查找的文本。这样,您只能保持当前正在RAM中检查的行。

您需要注意如何定义行结尾。不同的文本文件有不同的方式来定义行结束的位置。除此之外,您还需要了解.txt文件的编码方式,UTF8,ASCII等。

如果您小心,可以确保您的应用程序永远不会使用超过一定数量的RAM,并且垃圾收集器不那么繁忙。