forEach和for之间的性能差异(objs中的var o)

时间:2013-05-25 20:11:31

标签: dart

执行速度和/或内存消耗是否存在差异:

for (var o in objs) { ... }

objs.forEach((o) { ... });

1 个答案:

答案 0 :(得分:2)

使用列表和队列,使用Dart VM,后者在我的机器上的速度往往快2到2.5倍。这是有道理的,因为forEach在内部使用for (int i = 0; i < length; i++)的某些变体进行迭代,而for-in则使用Iterator.moveNext()进行迭代。

使用dart2js并在d8上运行,forEach在我的机器上的队列速度提高了1.3倍,但对于列表却慢了的1.2倍。

与往常一样,当性能是一个特别重要的考虑因素时,对现实世界的代码进行基准测试是有意义的。

如果内存消耗存在很大差异,我认为这是一个错误。

更新:Florian Loitsch在下面的评论中解释道:

  

moveNext方法目前尚未内联(太大)。这是应该很快改变的事情,之后两者应该大致以相同的速度。