请问文本编辑器在装载大文本的时候是如何解决的

longtsiu 发布于 2013/12/04 10:24
阅读 263
收藏 0

我使用eclipse swt技术做了一个类似文本编辑器的程序,但是在装载大约1000K的文本的时候,显得比较慢。我本来以为这速度应该就这样,因为装载好了之后,滑动条的滑动都是比较流畅的。但是我使用ultraEdit打开一个4000K的文本的时候,发现它的装载非常快,打开之后,我立即将滑动条滑到底,一点问题也没有。这个我的程序就做不到了,我对比了一下,我的程序的读取速度好像和windows自带的记事本差不多。

我就想知道ultraEdit是怎么做的?

加载中
0
独孤小败
独孤小败
好像是全读出来,装到内存里, 瞎掰的
0
max佩恩
max佩恩

当然是异步加载了,有些编辑器能秒开上G的文件。

0
小耶果
小耶果
按需加载.
0
longtsiu
longtsiu
我就是全读出来,装到内存里,据粗略的我的粗略的测试,估计windows自带的记事本和我一样的做法。
0
longtsiu
longtsiu
我也有UE开过很十几M的文件,稍微慢了点,但是很明显比记事本快。
0
longtsiu
longtsiu
如何异步加载?按需加载怎么实现的?我用滑动条随便滑到什么地方,顺畅的很。
0
陈海洋
陈海洋

异步加载,双缓冲绘制,那个控件是自己画的,不是你见到的普通控件

0
悠悠然然
悠悠然然

很明显不会一次全部加载,全部加载的肯定死球,就好象notepad打开几十M就卡死球的了。

一般来说,采用缓冲方式+分页信息加载的方式进行处理。

也就是说,在内存中只保存部分缓冲的内容和分页相关的信息,然后看要显示的内容是在缓冲中还是在磁盘中。

如果是在缓冲中就简单了,内存中修改一下指针位置即可,如果是不在内存中,则加载要显示的内容。

当然,如果一直这么处理,内存肯定不够的,那么就可以根据FIFO的方式,把超出最大缓冲的内容覆盖掉。

这样应该就可以在速度和内存之间获得一个平衡。

上面的同仁们说的双缓冲机制,只能解决绘制与显示过程的流利程度,解决不了打开大文件的问题。

返回顶部
顶部