Динамические типы медленнее в Dart? - PullRequest
0 голосов
/ 14 сентября 2018

Мне было интересно, медленнее ли динамические типы в Dart.

Пример:

final dynamic example = "Example"

против

final String example = "Example"

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Да, использование dynamic типизированных переменных в Dart часто медленнее, чем использование переменных, типизированных реальным типом.

Однако ваш пример не использует 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. Это может быть медленнее в зависимости от компилятора и целевой платформы.

0 голосов
/ 14 сентября 2018

Ну, в вашем первом примере (хе), example подразумевается как тип String, а не dynamic, так как это может быть медленнее?Руководство по стилю даже рекомендует не добавлять избыточные типы к тем переменным, которые могут быть выведены правильно.

...