C cHengyAng Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-18 #1 用richedit 从硬盘调入1.9 文本用了12秒 用loadfronfile和文件流均如此。 我希望能象ULTRAEDIT在2-3秒内调入,兄弟们,救命呀
M menxin Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-18 #2 你的问题我没找到太理想的解决办法。但你可以试一个如下方法: 1。如可以用memo,则使用lmd4中的lmdmemo,无文件长度限制。速度与文件长度 无关。只是字体。。。 2。可以用rxrichedit代替。在约节省一半时间。 我想最好的办法就是用控件解决,而且目前看来是非常有戏的,这几个控件每一个 实现方法好象都不同,再找找吧。good lucky.
你的问题我没找到太理想的解决办法。但你可以试一个如下方法: 1。如可以用memo,则使用lmd4中的lmdmemo,无文件长度限制。速度与文件长度 无关。只是字体。。。 2。可以用rxrichedit代替。在约节省一半时间。 我想最好的办法就是用控件解决,而且目前看来是非常有戏的,这几个控件每一个 实现方法好象都不同,再找找吧。good lucky.
W wuyi Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-18 #3 你的文本是纯文本吗,是1.9M? 还有你的哪几行调入的源代码能否贴出来?
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-19 #4 如果是1.9M用了12秒那可是相当快了. 如果是1.9k那就有问题了.
W wuyi Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-19 #5 如果1.9m而ULTRAEDIT在2-3秒内调入,我想可能它先读入一部分就显示的吧.
C cHengyAng Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-19 #6 是1.9M(>1.44M)的纯文本,ULTRAEDIT在2-3秒内调入可是完整的呀,不是只 调入供显示的部分(诸君可以试)。 实际的原因是共有六个文本需要一次性调入,每次启动得花近一分钟!
J JJLEI Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-19 #7 可以试一下,象网络蚂蚁那样,开多几个线程,将大文件分割成几部分, 同时调入,然后合并显示
C CJ Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-21 #8 如果可能,可以用“预读” 也可以重写 一个函数,把文本分开读,先显示了,然后读以后的
C cHengyAng Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-21 #9 看看吧:下面的过程只用不到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文本时约慢一秒) 继续征求本问题的良药。
看看吧:下面的过程只用不到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文本时约慢一秒) 继续征求本问题的良药。
T tqz Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-21 #10 建立一个Thread读文本。在读入一屏文本后立刻显示,同时这个Thread在后台继续 读文件。 或者根本不把整个文件一次读入(Word大概就是这样),显示到哪儿就读到哪儿。
李 李颖 Unregistered / Unconfirmed GUEST, unregistred user! 1999-05-21 #11 我试过了,问题不在于读取文本, 而在于将文本送到RichText中去。 以下代码将2M的文本读入内存,耗时300ms: with TStringList.Createdo try LoadFromFile(AFileName); finally Free; end; 以下代码将文本送入RichText,耗时无数: RichEdit1.Perform(WM_SetText,0,LongInt(PChar(AString))); 同样的代码对于一个TEdit,耗时不到1秒; 看来是RichEdit本身的问题了。 我会继续研究
我试过了,问题不在于读取文本, 而在于将文本送到RichText中去。 以下代码将2M的文本读入内存,耗时300ms: with TStringList.Createdo try LoadFromFile(AFileName); finally Free; end; 以下代码将文本送入RichText,耗时无数: RichEdit1.Perform(WM_SetText,0,LongInt(PChar(AString))); 同样的代码对于一个TEdit,耗时不到1秒; 看来是RichEdit本身的问题了。 我会继续研究
W wangkun Unregistered / Unconfirmed GUEST, unregistred user! 1999-07-04 #12 ULTRAEDIT在2-3秒内调入是完整的文件吗? 我让它装入2.5MB的纯文本文件,使用卷动棒,随着卷动 硬盘灯就闪动. 实际上ULTRAEDIT在显示的时候只是显示当前页,当然可能同时读入 好几页,防止翻页时读盘太频繁. 实际上显示几页速度非常快,那么ULTRAEDIT在干什么呢? 他主要把时间化在拷贝次文件到windows Temp目录 这样他只在备份文件上操作,如果用户要恢复他可以马上恢复原样. 所以我们应该使用动态显示的方法来显示,用户要显示什么地方我们 就将哪一部分读出来给他看.当然代码有些复杂.图快嘛,没办法.
ULTRAEDIT在2-3秒内调入是完整的文件吗? 我让它装入2.5MB的纯文本文件,使用卷动棒,随着卷动 硬盘灯就闪动. 实际上ULTRAEDIT在显示的时候只是显示当前页,当然可能同时读入 好几页,防止翻页时读盘太频繁. 实际上显示几页速度非常快,那么ULTRAEDIT在干什么呢? 他主要把时间化在拷贝次文件到windows Temp目录 这样他只在备份文件上操作,如果用户要恢复他可以马上恢复原样. 所以我们应该使用动态显示的方法来显示,用户要显示什么地方我们 就将哪一部分读出来给他看.当然代码有些复杂.图快嘛,没办法.
N nuke Unregistered / Unconfirmed GUEST, unregistred user! 1999-07-04 #13 对呀! 干吗非要一次性读入呢? 那样文件一大,再好的算法也得喝汤哦!
B barton Unregistered / Unconfirmed GUEST, unregistred user! 1999-07-05 #14 UltraEditor是纯文本编辑器,不能将其和RichEdit比吧?