效率低下的Split函数,用VBS的人你伤不起

标签: , , , , ,

曾经写过一篇《VBS中字符串连接的效率问题》,里面的主角是Join函数,效率是很高的,然而Join的反函数Split函数的表现就有些不尽如人意了。

Dim arr(999999)
For i = 0 To 999999
    arr(i) = i
Next

'Author: Demon
'Website: https://demon.tw
'Email: 380401911@qq.com

t = Timer
str = Join(arr, ",")
WScript.Echo Timer - t

t = Timer
a = Split(str, ",")
WScript.Echo Timer - t

先用Join生成一个很长的字符串(如果写入文件的话,有6M多),然后再用Split分割成数组。Join用了0.726秒就完成了,而Split,我等啊等啊,用了16.023秒才分割完。Split函数大约的确有点慢,有人提供了一种用正则表达式的方法:

'Author: Demon
'Website: https://demon.tw
'Email: 380401911@qq.com
'前半部分省略
t = Timer
str = str & ","
Set regex = New RegExp
regex.Global = True
regex.Pattern = "([^,]*),"
Set ms = regex.Execute(str)
Dim b() : ReDim b(ms.Count - 1)
For i = 0 To ms.Count - 1
    b(i) = ms.Item(0).Submatches(0)
Next
WScript.Echo Timer - t

用了8.703秒,差不多比Split快了一倍。然而,同样是split,JScript只需要几百毫秒,也就是零点几秒:

var arr = [];
for (var i = 0; i <= 999999; i++)
    arr.push(i);
str = arr.join(",");
/*
 * Author: Demon
 * Website: https://demon.tw
 * Email: 380401911@qq.com
 */
t = new Date;
a = str.split(",");
WScript.Echo((new Date) - t);

在我初学VBS的时候,看过UMU的一篇文章《VBS 比 JS 快?》,那时什么也不懂。不久前测试了一下他上面给出的代码,发现在Windows 7下两组程序都是JS比VBS要快,其他系统没有测试。虽然UMU说他测试的结果是VBS比JS快,但是我表示怀疑。至少就split而言,JScript已经远远超越了VBScript,用VBS的人你伤不起。

延伸阅读:关于split和instr效率问题的实验研究

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. NDS模拟器iDeaS
  2. VB6拾遗:轻量级COM对象
  3. 用VBS实现Shuffle洗牌算法
  4. 使用Scripting.Encoder加密VBS脚本
  5. EditPlus注册机及其算法

6 条评论 发表在“效率低下的Split函数,用VBS的人你伤不起”上

  1. ihipop说道:

    js快慢不是要看解析引擎的吗?
    win7里面还是调用Ie的引擎吗?

  2. shirne说道:

    试了下,wsh引擎的vbs与js
    vbs的join比js的快约一倍
    js的split比vbs的快约一倍
    win7系统

留下回复