我正在尝试读取 C# 中的日志文件,那是巨大的 - 大约 300mbs 的原始文本数据。我一直在用大约 1mb 的较小文件测试我的程序,该文件将所有日志消息存储到一个字符串 [] 数组中并使用包含进行搜索。
但是那太慢而且占用太多内存,我将永远无法处理 300mb 的日志文件。我需要一种 grep 文件的方法,它可以快速过滤文件以找到有用的数据并打印与搜索相对应的日志信息行。
最大的问题是规模,我认为 300mb 将是我的最大值,但需要我的程序来处理它。我可以使用哪些函数、数据结构、搜索来快速高效地扩展以读取那么大的日志文件
最佳答案
File.ReadLines
这可能是您最好的选择,因为它为您提供文本文件行的 IEnumerable
并在您遍历 IEnumerable
时懒惰地读取它们。然后,您可以使用任何方法来搜索您想要使用的行(Regex
、Contains
等)并对其执行一些操作。我下面的示例生成一个线程来搜索该行并将其输出到控制台,但您几乎可以做任何事情。当然,对大文件进行测试、测试、测试以查看您的性能里程。我想如果下面生成的每个线程都花费太长时间,您可能会遇到线程限制。
IEnumerable<string> lines = File.ReadLines("myLargeFile.txt");
foreach (string line in lines) {
string lineInt = line;
(new Thread(() => {
if (lineInt.Contains(keyword)) {
Console.WriteLine(lineInt);
}
})).Start();
}
编辑:通过我自己的测试,这显然更快:
foreach (string lineInt in File.ReadLines("myLargeFile.txt").Where(lineInt => lineInt.Contains(keyword))) {
Console.WriteLine(lineInt);
}
关于c# 如何快速通过 ~300mb 日志文件进行 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12739204/