我一直在想动态类型在Dart中是否较慢。
示例:
final dynamic example = "Example"
与
final String example = "Example"
答案 0 :(得分:6)
是的,在Dart中使用dynamic
类型的变量通常比使用实际类型的变量要慢。
但是,您的示例未使用dynamic
作为类型,而是使用类型推断来推断String
类型。在编译时,这可能会花费一点,但是在运行时,您的两个代码示例完全相同。这两个变量都键入为String
。
dynamic
方法的调用可能较慢,因为运行时系统必须添加额外的检查以确保变量可以完成您要使用它执行的操作。
如果您拥有int x = 2; print(x + 3);
,则运行时系统会知道int
具有+
运算符,甚至知道它是什么。
如果编写dynamic x = 2; print(x + 3);
,则运行时系统必须首先检查x
是否具有+
运算符,然后才能调用它,并在调用该对象之前找到该运算符的定义。它可能并不总是较慢,某些情况下的优化要好于其他情况,但永远不会更快。
并非所有代码都是性能敏感的,也不是所有变量都可以键入。如果您有一个包含String
或List
的变量,并且想知道长度,那么只写stringOrList.length
比stringOrList is String ? stringOrList.length : (stringOrList as List).length
更方便。取决于编译器和目标平台,它可能会更慢。
答案 1 :(得分:1)
好吧,在您的第一个示例(heh)中,example
被推断为类型String
,而不是dynamic
,那么它会变慢吗?样式指南甚至建议不要将冗余类型添加到可以正确推断的变量中。