如何快速显示一个大(GB)的文本文件?
How to quickly display a large (GB) text file?
我想在我的应用程序中快速显示一个大文本文件的内容,而不是将整个文件加载到内存中。
其他人是怎么做的?
Total Commander 是一个很棒的工具,它有一个很棒的内部查看器。它可以瞬间打开任何文件,无论文件有多大(或者速度快到我无法计时)。我在 12GB 文件上试过。显示文件时没有显着的内存使用量(仅约 100KB)。他们是怎么做到的?
SynEdit - 程序冻结(分钟),因为它首先解析整个文件,然后显示文本。
LargeTextFile
近似于滚动条的大小。滚动条不断调整(缩小)直到程序最终读取整个文件(可能需要几分钟)。和总指挥官比起来真的很烂
UltraEdit 32 - 程序冻结(我不得不杀死它,因为我没有耐心(或 ram)让它完成)
您只需按块读取文件(例如,按 64KB 或 128KB 的块),然后计算这些块中的行。不要尝试使用整个文档的行(如西尔维斯特建议的那样),而是使用块和偏移量,然后欺骗 UI 来模拟您不知道行的事实。
滚动条不会跟随行,而是跟随文件中的偏移量,然后是块内的。如果移动栏,您将猜测最近的行在块中开始和结束。
缺点是比较容易有最大行长,也就是chunk。 TotalCommander 将换行很长的行,我想这是由于其内部分块算法。
写于Delphi,源代码可用:
This is a very simple tool for displaying large text files where large
means they don't fit into the 2 GB memory which a 32 bit Windows process
can use. I successfully tested it displaying a 48 GB XML dump of the
English language Wikipedia which contained 789.577.286 lines of text.
https://sourceforge.net/projects/dzlargetextview/
(是的,我知道,这是一个老问题,但一个例子可能仍然有用。)
我想在我的应用程序中快速显示一个大文本文件的内容,而不是将整个文件加载到内存中。
其他人是怎么做的?
Total Commander 是一个很棒的工具,它有一个很棒的内部查看器。它可以瞬间打开任何文件,无论文件有多大(或者速度快到我无法计时)。我在 12GB 文件上试过。显示文件时没有显着的内存使用量(仅约 100KB)。他们是怎么做到的?
SynEdit - 程序冻结(分钟),因为它首先解析整个文件,然后显示文本。
LargeTextFile
近似于滚动条的大小。滚动条不断调整(缩小)直到程序最终读取整个文件(可能需要几分钟)。和总指挥官比起来真的很烂UltraEdit 32 - 程序冻结(我不得不杀死它,因为我没有耐心(或 ram)让它完成)
您只需按块读取文件(例如,按 64KB 或 128KB 的块),然后计算这些块中的行。不要尝试使用整个文档的行(如西尔维斯特建议的那样),而是使用块和偏移量,然后欺骗 UI 来模拟您不知道行的事实。
滚动条不会跟随行,而是跟随文件中的偏移量,然后是块内的。如果移动栏,您将猜测最近的行在块中开始和结束。
缺点是比较容易有最大行长,也就是chunk。 TotalCommander 将换行很长的行,我想这是由于其内部分块算法。
写于Delphi,源代码可用:
This is a very simple tool for displaying large text files where large means they don't fit into the 2 GB memory which a 32 bit Windows process can use. I successfully tested it displaying a 48 GB XML dump of the English language Wikipedia which contained 789.577.286 lines of text.
https://sourceforge.net/projects/dzlargetextview/
(是的,我知道,这是一个老问题,但一个例子可能仍然有用。)