AS3 提供了三种循环 for、forin、foreachin,这里测试一下三种方式的效率问题。
测试数据是一个 1000W 字符串的 Array,循环 push 到新的 Array 中。唯一不同的就是for的方式。为了防止GC造成的影响,每次输出后都会强制GC一次。
================================================
for (var i : int = 0; i < testDatas.length; i++)
times:10000000 used time:3286
times:10000000 used time:3343
times:10000000 used time:3345
times:10000000 used time:3337
times:10000000 used time:3342
times:10000000 used time:3292
times:10000000 used time:3304
times:10000000 used time:3380
times:10000000 used time:3312
times:10000000 used time:3240
================================================
for (var i : int = 0; i < length; i++)
times:10000000 used time:2526
times:10000000 used time:2550
times:10000000 used time:2601
times:10000000 used time:2502
times:10000000 used time:2530
times:10000000 used time:2549
times:10000000 used time:2548
times:10000000 used time:2535
times:10000000 used time:2548
times:10000000 used time:2533
================================================
for (var i : String in testDatas)
times:10000000 used time:86710
times:10000000 used time:11072
times:10000000 used time:11810
times:10000000 used time:10690
times:10000000 used time:10633
times:10000000 used time:10653
times:10000000 used time:10675
times:10000000 used time:10627
times:10000000 used time:10653
times:10000000 used time:10721
================================================
for each (var i : int in testDatas)
times:10000000 used time:4093
times:10000000 used time:2988
times:10000000 used time:2961
times:10000000 used time:2961
times:10000000 used time:2959
times:10000000 used time:2991
times:10000000 used time:2997
times:10000000 used time:2963
times:10000000 used time:2957
times:10000000 used time:3044
[b]测试结果:[/b]
1 foreach 效率最高,传统 for 效率也不错。
2 使用大家推荐的“将length保存为变量”的方法有 15% 的性能提升。
3 forin 是最消耗性能的。主要原因是内存消耗过大(瞬间暴增500MB),造成的大量GC。
[b]结论:[/b]
1 尽量使用 foreach,效率不错,代码更加清晰。
2 传统 for 使用变量存储数组 length 也有不错的性能。
2 尽量少用 forin,内存和实践上都消耗很大。
测试数据是一个 1000W 字符串的 Array,循环 push 到新的 Array 中。唯一不同的就是for的方式。为了防止GC造成的影响,每次输出后都会强制GC一次。
================================================
for (var i : int = 0; i < testDatas.length; i++)
times:10000000 used time:3286
times:10000000 used time:3343
times:10000000 used time:3345
times:10000000 used time:3337
times:10000000 used time:3342
times:10000000 used time:3292
times:10000000 used time:3304
times:10000000 used time:3380
times:10000000 used time:3312
times:10000000 used time:3240
================================================
for (var i : int = 0; i < length; i++)
times:10000000 used time:2526
times:10000000 used time:2550
times:10000000 used time:2601
times:10000000 used time:2502
times:10000000 used time:2530
times:10000000 used time:2549
times:10000000 used time:2548
times:10000000 used time:2535
times:10000000 used time:2548
times:10000000 used time:2533
================================================
for (var i : String in testDatas)
times:10000000 used time:86710
times:10000000 used time:11072
times:10000000 used time:11810
times:10000000 used time:10690
times:10000000 used time:10633
times:10000000 used time:10653
times:10000000 used time:10675
times:10000000 used time:10627
times:10000000 used time:10653
times:10000000 used time:10721
================================================
for each (var i : int in testDatas)
times:10000000 used time:4093
times:10000000 used time:2988
times:10000000 used time:2961
times:10000000 used time:2961
times:10000000 used time:2959
times:10000000 used time:2991
times:10000000 used time:2997
times:10000000 used time:2963
times:10000000 used time:2957
times:10000000 used time:3044
[b]测试结果:[/b]
1 foreach 效率最高,传统 for 效率也不错。
2 使用大家推荐的“将length保存为变量”的方法有 15% 的性能提升。
3 forin 是最消耗性能的。主要原因是内存消耗过大(瞬间暴增500MB),造成的大量GC。
[b]结论:[/b]
1 尽量使用 foreach,效率不错,代码更加清晰。
2 传统 for 使用变量存储数组 length 也有不错的性能。
2 尽量少用 forin,内存和实践上都消耗很大。