处理极大的字符串

时间:2011-03-03 20:10:44

标签: c#

嘿所有,我正在编写一个logviewer应用程序。这些日志的纯文本在100-200兆(几乎从不大于)之间。

我的应用程序不仅用于简化所述日志的读取,还提供大量解析选项(过滤/搜索等)。 Anywho,文件在网络驱动器上,所以我目前使用FileStream和BufferedStream来读取它们,这取决于文件大约需要15秒。

我的第一个问题是有更快的方法吗? ReadLine使解析更容易,但在大约25秒钟内完成。

其次,如果用户正在玩一个文件很多(使用不同的过滤器和搜索组合,最好的方法是在应用程序内存中处理它?我的意思是我每次都可以重新阅读它多数民众赞成。我试着将整个文件存储在一个似乎有效的全局StringBuilder中,但我无法将其传递给其他函数(OutOfMemoryException)。

什么是最好的方式来处理最终成为一个巨大的字符串? (请记住,没有进行任何操作,只是纯读取/过滤掉用户不希望看到的内容。

谢谢你们!

2 个答案:

答案 0 :(得分:2)

你真的必须阅读整个文件吗?只读了一半。当用户准备查看另一个“文件”或一组日期时,请阅读另一半。在这里选择你自己的号码以找到最佳平衡。

答案 1 :(得分:2)

就像Hans建议的那样,当用户需要移动文件时,以块的形式读取文件并按需执行。您还可以尝试智能并将附近的块保留在内存中并丢弃远处的块。

如果您这样做是为了好玩,您可能希望在处理文件时构建一点内存索引。对于您处理的每一行的含义,保留一些有关行号的元数据,它在文件中的起始位置以及它的行类型。这可能会使您的选择更容易使用。