标题: 效率低下的Split函数,用VBS的人你伤不起
作者: Demon
链接: https://demon.tw/programming/inefficient-split-function.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
曾经写过一篇《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的人你伤不起。
赞赏微信赞赏支付宝赞赏
随机文章:
js快慢不是要看解析引擎的吗?
win7里面还是调用Ie的引擎吗?
JSCRIPT
好吧 我被鄙视了
我哪敢啊。。。。我去过你博客
也是高手一个
菜鸟这里有礼了
JScript是用WSH做解释器的,而WSH很久没出过新版本了。
试了下,wsh引擎的vbs与js
vbs的join比js的快约一倍
js的split比vbs的快约一倍
win7系统