【发布时间】:2017-03-23 05:19:52
【问题描述】:
我正在搜索系统上的许多文件,以在其中查找我正在编写的计算机搜索程序的文本。但是,当读取较大的文件时,这些行会保留在内存中,使其使用超过 GB 的内存。我想知道问题是什么。这是我的代码。
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;
}
【问题讨论】:
-
你有什么问题?
-
在托管内存中,内存使用量增长是正常的。一旦有内存压力,GC 就会清理。
-
@Sefe 但千兆字节?
-
@DavidHeffernan 我想知道为什么在 for 循环中使用了这么多内存
-
嗯,你读了很多文件,如果没有理由让 GC 收集内存,如果不收集,效率会更高。您的程序是否表现不佳?
标签: c# file memory memory-management foreach