我正在搜索系统上的许多文件,以查找我正在编写的计算机搜索程序中的文本。但是,当读取较大的文件时,这些行保留在内存中,使其超过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;
}
答案 0 :(得分:0)
您应该像FileStream一样打开一个流,并且一次只能读取1024个字节。您应检查字节,并仅在RAM中构建当前行,直到找到新的行字符,然后在该行中查找您要查找的文本。这样,您只能保持当前正在RAM中检查的行。
您需要注意如何定义行结尾。不同的文本文件有不同的方式来定义行结束的位置。除此之外,您还需要了解.txt文件的编码方式,UTF8,ASCII等。
如果您小心,可以确保您的应用程序永远不会使用超过一定数量的RAM,并且垃圾收集器不那么繁忙。