| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 159 人关注过本帖
标题:多次写入数组,用时越来越多,怎么解决?
只看楼主 加入收藏
ictest
Rank: 2
等 级:论坛游民
帖 子:230
专家分:77
注 册:2010-2-17
结帖率:73.61%
  已结贴   问题点数:10  回复次数:3   
多次写入数组,用时越来越多,怎么解决?
一个目录下有24个文件,用 For i = 0 To File1.ListCount - 1 来循环处理,第一个文件经过处理得到一个MASK.txt文件,大约1万行,每行就一个字符。用
程序代码:
    Open (Dir1.Path & "\mask.txt") For Input As #1
    bbmask = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
    Close #1
    For z = 1 To UBound(bbmask)
        Print bbmask(z)
    Next
语句进行写入数组,然后kill (Dir1.Path & "\mask.txt") ,接着使用这个数组,使用完后,对这个数组没有做什么处理,就继续循环到下一个文件,再生成一个mask.txt文件,然后再重复使用上面的语句进行写入数组,然后kill ,接着使用这个数组,使用完后,对这个数组没有做什么处理,就继续循环到下一个文件.........

现在遇到一个问题,写入数组的时间越来越长,第一个文件生成的MASK文件写入数组用时0.46秒,第二个文件生成的MASK文件写入数组用时0.93秒,第三个文件生成的MASK文件写入数组用时1.37秒......详细数据如下:
程序代码:
1、把新的MASK文件读入数组   0.46
2、把新的MASK文件读入数组   0.93
3、把新的MASK文件读入数组   1.37
4、把新的MASK文件读入数组   1.83
5、把新的MASK文件读入数组   2.26
6、把新的MASK文件读入数组   2.75
7、把新的MASK文件读入数组   3.18
8、把新的MASK文件读入数组   3.61
9、把新的MASK文件读入数组   4.13
10、把新的MASK文件读入数组   4.64
11、把新的MASK文件读入数组   5.03
12、把新的MASK文件读入数组   5.78
13、把新的MASK文件读入数组   6.32
14、把新的MASK文件读入数组   7.55
15、把新的MASK文件读入数组   8.93
16、把新的MASK文件读入数组   7.24
17、把新的MASK文件读入数组   7.39
18、把新的MASK文件读入数组   7.92
19、把新的MASK文件读入数组   8.42
20、把新的MASK文件读入数组   8.87
21、把新的MASK文件读入数组   9.29
22、把新的MASK文件读入数组   9.78
23、把新的MASK文件读入数组   10.18
24、把新的MASK文件读入数组   10.63

请教,这个问题怎么解决?
2018-11-24 12:55
ZHRXJR
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:77
帖 子:794
专家分:4152
注 册:2016-5-10
  得分:10 
我认为不是时间越来越慢,大约1万行的文件中数据读取、写入数组、删除文件,一个文件使用0.46秒已经够快的了。
你下面统计的用时应该是读取第一个文件到第 n 个文件的用时,基本上是0.46的 n 倍,实际每个文件用时也只有0.46秒左右,不存在慢的问题。
24个文件有24万行,读取在一般情况下也需要6-8秒,你还存储数组、删除文件,用时10秒已经够快了。
2018-11-25 08:41
ictest
Rank: 2
等 级:论坛游民
帖 子:230
专家分:77
注 册:2010-2-17
  得分:0 
不好意思,可能是我没有叙述明白,我这样说吧,

一个目录下有24个文件,分别为A1.txt——A24.txt,用 For i = 0 To File1.ListCount - 1 和 Next i 来对这24个文件按顺序进行处理,对每个文件的操作是一样的。

第一个文件(A1.txt)文件经过处理得到一个MASK.txt文件,内容大约1万行,每行就一个字符。用
程序代码:
    Open (Dir1.Path & "\mask.txt") For Input As #1
    bbmask = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
    Close #1
    For z = 1 To UBound(bbmask)
        Print bbmask(z)
    Next

语句来写入数组,写完数组后就 Kill mask.txt 文件,接下来使用这个数组进行一些工作,在使用完这个数组后,没有做什么处理(例如清空数组什么的),就开始处理第二个文件(A2.txt),

第二个文件(A2.txt)文件经过处理得到一个MASK.txt文件,内容大约1万行,每行就一个字符。用
程序代码:
    Open (Dir1.Path & "\mask.txt") For Input As #1
    bbmask = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
    Close #1
    For z = 1 To UBound(bbmask)
        Print bbmask(z)
    Next

语句来写入数组,写完数组后就 Kill mask.txt 文件,接下来使用这个数组进行一些工作,在使用完这个数组后,没有做什么处理(例如清空数组什么的),就开始处理第三个文件(A3.txt)






直至第24个(A24.txt)文件处理完。

这个写入数组的动作,是在处理每个文件时用一次,每次都是 For z = 1 To UBound(bbmask),也就是说,处理24个文件,数组要重写24次,每次都写1万行,并不是处理第一个文件时数组里有1万行,处理第二个文件时数组里有两万行.....就算第24个文件写完数组,数组里也只有1万行,没有24万行。

不知我这样是否说明白了?


麻烦各位大神给个解决之法吧,谢谢啦!
2018-11-25 23:07
ictest
Rank: 2
等 级:论坛游民
帖 子:230
专家分:77
注 册:2010-2-17
  得分:0 
好啦,我又重新捋了一遍我的程序,发现BUG在哪里啦,谢谢!
2018-11-25 23:44







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

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