怎么样比较快地读入很大的文本文件,比如100M.(50分)

100m的文本~ 能装葵花宝典n本 六脉神剑m本 九阴九阳真经(中日韩德意英法译本)各w套
金庸书中所有人物带着自己的7大姑8大姨每个人写一篇日记不少于10000字 还能有富裕[:D]
正题
讨论的大概是可行性吧,其实如楼上所说完全没必要一次读入,那还不得累死你啊!
 
assignfile

reset

blockread !!!!
 
怎么算快?
一次读如100M要多少时间?各位测试过吗?
以现在的机器配置,一次读入100M,是很轻松的事,用不了多长时间,很快。
就看各位的机器内存和CPU、硬盘的速度了,通常也就几秒钟,真的很快,不过如果内存小于128M就免谈了。

关键是读入内存如何处理,这才是非常耗费时间的!!
 
内存映射比较有效率。
 
用线程吧。
 
如果是在delphi中,就用文件流TFilestream比较好
 
是啊,大家都是说的理论实现,有没有具体操作呢〉?我觉得
assignFile之类的都是把整个文件读进内存吧?如果分批读取,要想找到
上次读到哪个部分了,你不把整个的文件都读进来,怎么查找啊??我的感觉,
如果大家有好的方法,尽量具体一点!谢谢!
 
这也是程序员?
 
TFileStream
 
目的不是很明确,大家到是争的茫然。
 
不需要使用文件映像,也不必开 100 MB 的缓冲,假如你使用 Delphi 中的标准文本控件,
可以接受的一次读取速度,也就在几十KB的程度,多了就要等待了,这样还不如响应滚动
消息,分批读取来得节约。另外,假如你要搜索的话,可以考虑多开点内存。100 MB 不是
大文件,一次性读出超过 4GB 才有点晕。因为读文件函数在目前的 Windows 版本下,最
大只能一次性读 4GB:(DWord byte)。
 
呵呵,小雨哥,内存映像可以超出 4G 的限制:)
 
没错。映像 是个好东西。有时候也麻烦,就拿 Memo 来说,读一个 3MB 的磁盘二进制文件
把它转为 Hex 表示,并在 Memo 中按 16 字节一行显示出来,结果连读带转换,在我电脑
上只用了 152ms ,一显示,却耗掉 670978ms ,一直毫无办法,能想到的最好办法,就是
关掉 Memo 的显示,不知道是否可以利用内存分段映像的,利用首行去判断,不过没去试。
 
内存映像可以多进程共享,所以也是有限制的,而且速度不够快,还不如直接自己用GetMem来的快,我个人认为小雨哥的建议是对的,要想提高效率,开固定大小的缓冲区,自己计算显示区域,分段读取。
 
只能分块读。没有别的方法。
计算你要的数据大约到哪个范围,读出来再操作。
 
晕,是不是 MyIE 的问题,经常发现写了半天,贴出来就不见了:(


 
顶部