c#如何快速浏览~300mb日志文件

时间:2012-10-05 03:49:22

标签: c# arrays file grep

我试图在c#中读取一个巨大的日志文件 - 大约300mb的原始文本数据。我一直在大约1mb的小文件上测试我的程序,它将所有日志消息存储到string []数组中并使用contains进行搜索。

然而,这太慢并占用太多内存,我永远无法处理300mb日志文件。我需要一种方法来grep文件,它快速过滤它找到有用的数据并打印对应于搜索的日志信息行。

最大的问题是规模,我认为300mb将是我的最大值,但需要我的程序来处理它。我可以使用哪些功能,数据结构,搜索,可以快速,高效地读取大的日志文件

1 个答案:

答案 0 :(得分:7)

File.ReadLines可能是您最好的选择,因为它会为您提供文本文件的IEnumerable行,并在您遍历IEnumerable时懒惰地读取它们。然后,您可以使用任何方法搜索您要使用的行(RegexContains等)并对其执行某些操作。下面我的例子产生一个线程来搜索该行并将其输出到控制台,但你可以做任何事情。当然,TEST,TEST,TEST在大文件上看你的性能里程。我想如果下面生成的每个单独的线程花费的时间太长,你可以遇到一个线程限制。

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);
}