在飞镖中,创造一个未来,完成它并使它返回效率低于创造一个直接的未来?

时间:2012-11-11 03:35:53

标签: performance dart future

之间的性能差异是什么:

var completer = new Completer<String>();
var future    = completer.future;
completer.complete("value");
return future;

var future = new Future<String>.immediate("value");
return future;

2 个答案:

答案 0 :(得分:3)

希望很快Future.immediate将使用引擎盖下的完成程序使其异步,因此现在任何性能差异都会消失。

即使在今天,任何这样的性能差异都应该非常小。 Completer和Future中的所有代码都是同步和小的,因此开销包括一个Completer的分配和一些方法调用。那应该是非常非常快的。

Upshot:坚持完成。

答案 1 :(得分:0)

new Future.immediate()Completer.complete()都返回Future,其值为下一个事件循环中可用的值。 (这是使用新的Timer(0,回调)实现的,请参阅future_impl.dart

例如,这两个语句的行为相同:

  new Future.immediate('blah').then(print);
  Completer..complete('blah').future.then(print);

DartVM和dart2js应该能够优化两个示例之间的任何性能差异。所以使用Future.immediate(),它更短。

注意:正如上面提到的Justin,Future.immediate()曾经是同步的,现在不再是这种情况了。