读取文本文件效率问题。(读取超慢)

zhuhuofong 2009-07-07 04:59:36
 Open App.Path & "\SendMessage.txt" For Input As #iFile
Do
DoEvents
Line Input #iFile, astr
Text1.Text = Text1.Text + astr + vbCrLf
Loop Until EOF(iFile)
Close iFile
EndTime = GetTickCount
Debug.Print EndTime - StartTime

要读取的文件大小为 31.4kb ,读取时间要2万多毫秒,也太慢了吧,各位大侠,用什么方法达到读取速度更快的目的,
有一些专用处理文本的软件打开一个有十几万行约为2M的文件只要估计1秒不到的时间。
...全文
990 59 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdzwj 2009-07-11
  • 打赏
  • 举报
回复
速度慢应该和用+号连接字符串有关。 VB中用+或者&符号连接字符串时,每次的连接都会进行字符串的深度复制,会涉及多次的内存分配、销毁、复制等耗时操作,影响性能是肯定的。 更不要说你这个代码中还涉及窗体控件的刷新等操作。

可以将数据一次性读入数组,在程序中解析完成后再将结果写入窗体控件。几十K的数据几乎不会产生耗时。
clz_boy 2009-07-11
  • 打赏
  • 举报
回复
用富文本框控件一次打开完毕 ,很快.
bdzwj 2009-07-11
  • 打赏
  • 举报
回复
应该是do while在每轮询一次就会产生一个判断,也就意味着多出999999999条判断指令, for 应该是寄存器直接累加,
bdzwj 2009-07-11
  • 打赏
  • 举报
回复
do while多了一个判断, for 是直接循环
zhuhuofong 2009-07-11
  • 打赏
  • 举报
回复
另外
为什么 for 循环比 do while 循环快一半以上。
例如
for i=1 to 999999999
a=a+1
next
do while a<999999999
a=a+1
loop
得到结果是 for 比 do 快一半以上。why????

zhuhuofong 2009-07-11
  • 打赏
  • 举报
回复
另外
为什么 for 循环比 do while 循环快一半以上。
例如
for i=1 to 999999999
a=a+1
next
do while a<999999999
a=a+1
loop
得到结果是 for 比 do 快一半以上。why????


zhuhuofong 2009-07-11
  • 打赏
  • 举报
回复
现在是有点明白了,应该是东方之珠说的 textbox控件64K限制。我试了一下,用二进制读了一个20M的文件,再用二进制把读出来的文件写到一个新的文件里面,耗时很少。要是让读出来的文件显示在TEXT里面就会显示不全。所以 应该是东方之珠说的 textbox控件64K限制

谢谢大家了。

terrywolf 2009-07-11
  • 打赏
  • 举报
回复
严重关注!
zzyong00 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 chenjl1031 的回复:]
引用 47 楼 myjian 的回复:
引用 46 楼 chenjl1031 的回复:
引用 31 楼 chenhui530 的回复:
用文件影射多好啊~~只要文件大小不是很大速度要比读文件要快很多


顺便问问陈兄:计算机系统日期被修改为2003年9月8日,是什么病毒?

会不会是"BIOS电池没电"病毒.......?



联想新电脑才用了一年。把日期改为现在的日期,一会儿又被改为了2003年9月8日! 瑞星禁止修改日期也失效了,愚闷啊!
[/Quote]
现过几天,如果开不了机,哪就是BIOS电池没电了
samtyty 2009-07-10
  • 打赏
  • 举报
回复
我曾经用FSO,但是去速度比input要慢很多,是我没有正确使用?
chenhui530 2009-07-10
  • 打赏
  • 举报
回复
看有什么可疑驱动吗
东方之珠 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 myjian 的回复:]
引用 46 楼 chenjl1031 的回复:
引用 31 楼 chenhui530 的回复:
用文件影射多好啊~~只要文件大小不是很大速度要比读文件要快很多


顺便问问陈兄:计算机系统日期被修改为2003年9月8日,是什么病毒?

会不会是"BIOS电池没电"病毒.......?

[/Quote]

联想新电脑才用了一年。把日期改为现在的日期,一会儿又被改为了2003年9月8日! 瑞星禁止修改日期也失效了,愚闷啊!
嗷嗷叫的老马 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 chenjl1031 的回复:]
引用 31 楼 chenhui530 的回复:
用文件影射多好啊~~只要文件大小不是很大速度要比读文件要快很多


顺便问问陈兄:计算机系统日期被修改为2003年9月8日,是什么病毒?
[/Quote]
会不会是"BIOS电池没电"病毒.......?
东方之珠 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 chenhui530 的回复:]
用文件影射多好啊~~只要文件大小不是很大速度要比读文件要快很多
[/Quote]

顺便问问陈兄:计算机系统日期被修改为2003年9月8日,是什么病毒?
无·法 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 yachong 的回复:]
字符串连接注意一下细节也可以提高速度
Private Sub Command1_Click()
    Dim i As Long
    Dim s As String
    Dim t As String
    t = "123"
    Debug.Print Time
    For i = 0 To 40000
        s = s & t & vbcrlf '这种连接方式需要10秒才能完成整个循环
        s = s & (t & vbcrlf)'加个括号,时间缩短到5秒
    Next
    Debug.Print Time
End Sub
[/Quote]
只有这个帖子对我最有价值,其他的都玩过了
vbman2003 2009-07-09
  • 打赏
  • 举报
回复
richtextbox效率远远高于textbox,显示大文件首选前者...
vbman2003 2009-07-09
  • 打赏
  • 举报
回复
richtextbox放二万行应该没问题吧?
textbox是有限制的,至于是不是32K不清楚....
zhuhuofong 2009-07-09
  • 打赏
  • 举报
回复
不知道怎么用文件影射,C代码我是半点也看不来。能给个VB的例子吗?
chenhui530 2009-07-09
  • 打赏
  • 举报
回复
用文件影射多好啊~~只要文件大小不是很大速度要比读文件要快很多
zzyong00 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 zhuhuofong 的回复:]
引用 39 楼 zzyong00 的回复:
为什么不用强大的FSO呢
Dim fso As New FileSystemObject, objTS As TextStream
Set objTS = fso.OpenTextFile("d:\13.txt", ForReading)
Debug.Print objTS.ReadAll

FileSystemObject不是VB内置的,新建一个FileSystemObject对象
VB codeSet fso=CreateObject("Scripting.FileSystemObject")Set objts= fso.OpenTextFile("d:\13.txt",1)
Debug.Print objts.readall
objts.readall'超出文件尾
[/Quote]


Private Sub Command1_Click()
Dim fso As New FileSystemObject, objTS As TextStream
Set objTS = fso.OpenTextFile("d:\13.txt", ForReading)
Debug.Print objTS.ReadAll
End Sub

Private Sub Form_Load()
Open "d:\13.txt" For Binary As #1
Put #1, 40000000, 96
Close #1
End Sub

我读了一个38M的文件,也没有出现“超出文件尾”的问题啊!
还有,你引用了FSO,就不用Createobject了
加载更多回复(39)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧