【发布时间】:2012-10-05 03:49:22
【问题描述】:
我试图在 C# 中读取一个非常大的日志文件 - 大约 300mbs 的原始文本数据。我已经在大约 1mb 的较小文件上测试我的程序,它将所有日志消息存储到 string[] 数组中并使用 contains 进行搜索。
但是这太慢了,占用了太多内存,我永远无法处理 300mb 的日志文件。我需要一种 grep 文件的方法,它可以快速过滤它以找到有用的数据并打印与搜索相对应的日志信息行。
最大的问题是规模,我认为 300mb 将是我的最大值,但需要我的程序来处理它。我可以使用哪些函数、数据结构、搜索来以速度和效率很好地扩展来读取这么大的日志文件
【问题讨论】:
-
我确信会有一些方法可以更快地运行 grep,但是在你这样做之前,你是否能够在 grep 之前通过更快的字符串比较检查来预过滤日志?
-
您是在使用 grep 还是正在编写一个程序来这样做?您可以考虑逐行处理而不是读取整个文件。一个更复杂但独立于行长的操作是您一次读取一定数量的字符并处理它(虽然实现起来很棘手)。
-
如果可以使用 .NET 4,请参阅this question 推荐 StreamReader 或 MemoryMappedFile。
-
您是否测量了最耗时的内容?是读取文件吗?搜索?垃圾收集?
-
日志文件太大了,我想读取文件,搜索我正在寻找的标签。我想在命中时显示并忽略其他情况。我将它们存储在列表框视图(数组)中。我必须找到一种更好的方法来将信息写入不使用太多内存的 c#,因为我认为列表框本质上是一个数组