我需要逐行读取文本文件(来自服务器的日志文件)并且它们很大(大约150-200MB)。我正在使用StreamReader,它非常适合12MB这样的“小”文件但不是那么大。一段时间后它被加载,它显示在我的DataGridView中,但它的内存很大。我在这个DataGridView上使用bindingSource.Filter(就像文本框一样,当用户写信时它会过滤一列比较字符串,不显示文本框中没有字母的行等等)和大文件也没用。所以我想问你对我来说什么是最好的解决方案。
我正在寻找并找到一些解决方案,但我需要帮助决定什么是最适合我和实施(或者如果有其他的东西):
感谢您的帮助
好的,所以我正在实现Paging,我读取5k行文本文件,而不是单击按钮下一行等等。我正在使用BaseStream.Position来保存起始读数,但我想使用一些其他函数来保存行数,主要是我想使用方法从精确行开始读取但我找不到StreamReader的任何内容。有类似的东西吗?
答案 0 :(得分:1)
在后台加载数据并实时显示。我不确定如何做到这一点,我不知道如何处理此解决方案中的过滤。
这没有用。它仍将在后台线程中消耗大量内存。
也许以某种方式升级streamreader?或者编写自己的方法从二进制读取器读取文件中的行?
仍然没有帮助,一旦你将整个文件读入内存,它就会消耗内存。
我认为你明白了。不要将整个文件加载到内存中。只加载它的块。使用分页。无论如何,您无法在单个屏幕上显示200MB的数据,因此只需加载您需要在屏幕上显示的部分。所以基本上你需要实现以下功能:
public IEnumerable<string> ReadFile(int page, int linesPerPage, out totalLines)
{
...
}