Dart中空函数的性能表现

4

假设我有以下代码:

void test(){
 assert(() {
   print("This is Test");
 });
}

根据这个问题,在生产构建中,Dart将删除assert
但是调用的test()函数呢?
这个函数会在构建时被删除吗?
如果我多次调用空函数,这会对性能产生重大影响吗?
2个回答

5
编译器会通过内联和删除空函数调用来优化您的代码。

谢谢!您能添加一些参考资料吗? - selharxets
1
我没有参考,但这是基本的编译器优化,并且我在 Dart GitHub 问题中看到了它的提及。 - Günter Zöchbauer
我也是这么想的,但由于我没有找到与Dart相关的任何参考资料,所以我非常不确定。暂时将其标记为已接受的答案。 如果有人能够添加参考资料,我会很高兴的。 - selharxets
1
有改进文档和工具的计划,但还未实施。 https://github.com/dart-lang/sdk/issues/33920#issuecomment-430211662 - Günter Zöchbauer
1
这个视频可能提供一些见解(我还没看过),但 Vyacheslav 已经做了几次关于 Dart 编译和优化的演讲。 - Günter Zöchbauer

2

这个函数会在构建时被删除吗?

除非你只在其他断言中使用它,否则不会被删除。一个典型的例子是:

assert(() {
  test();
  return true;
}());

如果你只是这样使用它,那么在构建时该函数将被移除。


如果我多次调用 test(),会对发布版本的性能产生影响吗? - selharxets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接