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

gmo*_*osx 5 dart

以下之间的执行速度和/或内存消耗是否有任何差异:

for (var o in objs) { ... }
Run Code Online (Sandbox Code Playgroud)

objs.forEach((o) { ... });
Run Code Online (Sandbox Code Playgroud)

Dar*_*tle 5

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

在我的机器上使用dart2js和运行队列大约快 1.3 倍,但d8列表慢1.2倍。forEach

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

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

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

moveNext方法当前未内联(太大)。这种情况很快就会改变,之后两者的速度应该大致相同。

  • `moveNext` 方法当前未内联(太大)。这种情况很快就会改变,之后两者的速度应该大致相同。 (3认同)