如何快速将文本调入richedit(150分)

  • 主题发起人 主题发起人 cHengyAng
  • 开始时间 开始时间
C

cHengyAng

Unregistered / Unconfirmed
GUEST, unregistred user!
用richedit 从硬盘调入1.9 文本用了12秒
用loadfronfile和文件流均如此。
我希望能象ULTRAEDIT在2-3秒内调入,兄弟们,救命呀
 
你的问题我没找到太理想的解决办法。但你可以试一个如下方法:
1。如可以用memo,则使用lmd4中的lmdmemo,无文件长度限制。速度与文件长度
无关。只是字体。。。
2。可以用rxrichedit代替。在约节省一半时间。
我想最好的办法就是用控件解决,而且目前看来是非常有戏的,这几个控件每一个
实现方法好象都不同,再找找吧。good lucky.
 
你的文本是纯文本吗,是1.9M? 还有你的哪几行调入的源代码能否贴出来?
 
如果是1.9M用了12秒那可是相当快了. 如果是1.9k那就有问题了.
 
如果1.9m而ULTRAEDIT在2-3秒内调入,我想可能它先读入一部分就显示的吧.
 
是1.9M(>1.44M)的纯文本,ULTRAEDIT在2-3秒内调入可是完整的呀,不是只
调入供显示的部分(诸君可以试)。
实际的原因是共有六个文本需要一次性调入,每次启动得花近一分钟!
 
可以试一下,象网络蚂蚁那样,开多几个线程,将大文件分割成几部分,
同时调入,然后合并显示
 
如果可能,可以用“预读”
也可以重写 一个函数,把文本分开读,先显示了,然后读以后的
 
看看吧:下面的过程只用不到2秒时间就能完成1.9M文本读取,
不过不是我的初衷:最好能读入就放入Richedit控件但不增加时间
procedure TForm1.BtnOpenFileClick(Sender: TObject);
var infile:textFile;
str:string;
i:longint;
//str:array[0..65535] of string;
begin
if OpenDialog1.Execute then
begin
StatusBar1.Panels.Items[0].Text := 'From ' + TimeToStr(Time);
Screen.Cursor:=crHourGlass;
Assignfile(inFIle,OpenDialog1.FileName);
Reset(inFile);
i:=0;
while not EOF(Infile)do
begin
Readln(inFIle,str);//readln(infile,str);
INC(i);
end;
Screen.Cursor:=crDefault;
StatusBar1.Panels.Items[1].Text := 'To ' + TimeToStr(Time);
CloseFile(inFile);
edit1.Text:=inttostr(i);//读取行数
end;
end;
实际运行还是比UltraEdit慢一点点(在调10M文本时约慢一秒)
继续征求本问题的良药。
 
建立一个Thread读文本。在读入一屏文本后立刻显示,同时这个Thread在后台继续
读文件。
或者根本不把整个文件一次读入(Word大概就是这样),显示到哪儿就读到哪儿。
 
我试过了,问题不在于读取文本,
而在于将文本送到RichText中去。
以下代码将2M的文本读入内存,耗时300ms:
with TStringList.Createdo
try
LoadFromFile(AFileName);
finally
Free;
end;

以下代码将文本送入RichText,耗时无数:
RichEdit1.Perform(WM_SetText,0,LongInt(PChar(AString)));
同样的代码对于一个TEdit,耗时不到1秒;
看来是RichEdit本身的问题了。
我会继续研究
 
ULTRAEDIT在2-3秒内调入是完整的文件吗?
我让它装入2.5MB的纯文本文件,使用卷动棒,随着卷动
硬盘灯就闪动.
实际上ULTRAEDIT在显示的时候只是显示当前页,当然可能同时读入
好几页,防止翻页时读盘太频繁.
实际上显示几页速度非常快,那么ULTRAEDIT在干什么呢?
他主要把时间化在拷贝次文件到windows Temp目录
这样他只在备份文件上操作,如果用户要恢复他可以马上恢复原样.
所以我们应该使用动态显示的方法来显示,用户要显示什么地方我们
就将哪一部分读出来给他看.当然代码有些复杂.图快嘛,没办法.
 
对呀!
干吗非要一次性读入呢?
那样文件一大,再好的算法也得喝汤哦!
 
UltraEditor是纯文本编辑器,不能将其和RichEdit比吧?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部