标题:如何提高文件读写速度?
只看楼主
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
结帖率:69.81%
已结贴  问题点数:20 回复次数:10 
如何提高文件读写速度?
一个CSV文件,约25兆,200000(二十万)行左右,对这个文件进行读写成一个新的文件,我的程序如下,附件为CSV文件,在我的电脑上大概需要8秒左右,还能快些吗?最快能多快?
程序代码:
Private Sub Command1_Click()
    Dim strWj As String
    Dim strJ() As String
    Dim aryContent() As Byte
    Dim tmp() As String
    Dim i As Long
    Dim j As Long
    tttt = Timer
    Open "c:\1.csv" For Binary As #1
        ReDim aryContent(LOF(1) - 1)
        Get #1, , aryContent
    Close #1
    Open "c:\temp.txt" For Append As #2
    strWj = StrConv(aryContent, vbUnicode)
    strJ = Split(strWj, vbCrLf)
    For i = 0 To UBound(strJ)
        If IsNumeric(Left(strJ(i), 1)) = True Then
            tmp() = Split(strJ(i), ",")
                If tmp(2) = "True" Then
                    Print #2, tmp(5) & vbTab & tmp(6) & vbTab & tmp(16) & vbTab & tmp(20) & vbTab & tmp(23) & vbTab & tmp(24)
                End If
        End If
    Next i
    Close #2
    MsgBox Timer - tttt
End Sub


1.rar (3.79 MB)

搜索更多相关主题的帖子: Dim 文件 tmp If For 
2020-03-20 18:26
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
恳求路过的大神和各位高手能够给予帮助,谢谢了(^~^)。
2020-03-21 09:06
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:10 
已经很快了,在我电脑上不到3秒。

能编个毛线衣吗?
2020-03-21 09:52
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
版主大大,我还想尝试另外一种方法,但语句不会写,就是所有需要写入的东西内存中生成,然后一次性写入,不知会不会快点,另外这个语句怎么写,请版主教我。谢谢!
2020-03-21 10:02
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:10 
看代码,已很不错了。
你测试一下 print 命令的效率是否有差异
Print #2, tmp(5) ; vbTab ; tmp(6) ; vbTab ; tmp(16) ; vbTab ; tmp(20) ; vbTab ; tmp(23) ; vbTab ; tmp(24)

按我的理解
使用 & 进行连接字符串时,每个 & 都要进行一次连接字符串的运行。
使用 分号 ,我理解是按指定的格式,把数据一个一个的压进堆栈,然后直接调用函数。C 写的函数,比我们用VB写的代码要快。

授人于鱼,不如授人于渔
早已停用QQ了
2020-03-21 10:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
可以尝试直接处理byte数组,然后一句Put #1, , aryContent写入试试。不要尝试转换为字符串处理,那样速度比直接写入文件还慢。

能编个毛线衣吗?
2020-03-21 10:35
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
恳求wmf2014版主不吝赐下能达到我原程序相同效果的写法和语句,拜谢。
2020-03-21 11:28
smartgkk
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-8-18
得分:0 
应该使用指针的方法会更快一些...
2021-05-01 18:49
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:0 
以下是引用风吹过b在2020-3-21 10:11:33的发言:

看代码,已很不错了。
你测试一下 print 命令的效率是否有差异
Print #2, tmp(5) ; vbTab ; tmp(6) ; vbTab ; tmp(16) ; vbTab ; tmp(20) ; vbTab ; tmp(23) ; vbTab ; tmp(24)

按我的理解
使用 & 进行连接字符串时,每个 & 都要进行一次连接字符串的运行。
使用 分号 ,我理解是按指定的格式,把数据一个一个的压进堆栈,然后直接调用函数。C 写的函数,比我们用VB写的代码要快。

在我的电脑上实测,用;比用&慢大概0.3
2021-05-01 19:26
约定的童话
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:47
帖 子:190
专家分:1061
注 册:2021-8-1
得分:0 
实测图
2021-08-04 08:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500464-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060000 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved