Исследуйте проблемы с производительностью или выясните, какая реализация лучше

Kotlin предоставляет простые способы измерения времени выполнения. Это удобно во многих местах. Вы можете использовать его для сравнения алгоритмов или проверки того, какая часть вашего кода работает медленно.
Давайте сначала рассмотрим классический (в стиле Java) способ измерения времени выполнения. Только тогда мы сможем оценить преимущества Kotlin.
В качестве наглядного примера сравним производительность ArrayListи LinkedList. Мы измеряем время, необходимое для сложения 50 миллионов целых чисел, а затем суммируем их. Проверьте код на GitHub.
Классический способ в стиле Java
Если вы какое-то время работали с Java, то могли видеть что-то подобное (ну, очевидно, это в Java, а не в Kotlin).
Этот подход работает просто отлично, но он имеет недостатки.
Во-первых, мы должны преобразовать результат из наносекунд в секунды. Во-вторых, нам нужно ввести одну или две переменные и длинную строку кода, чтобы получить результат.
Это может привести к путанице, если вам нужно измерить разные части одного и того же метода. Легко случается, что вы вычисляете разницу с неправильными переменными.
Легко видеть, что есть простое решение: извлечение метода измерения времени. Но зачем нам изобретать велосипед?
Kotlin способ измерения времени
мера TimeNanos и мера TimeMillis
Самый простой способ в Kotlin — использовать measureTimeNanosand measureTimeMillis from kotlin.time .
Если вы посмотрите под капот, эти функции делают то же самое, что вы видели выше:
Методы возвращают время выполнения, поэтому нам не нужно их вычислять вручную. Однако нам все еще нужно преобразовать единицу измерения вручную. И есть большая оговорка! Вы не можете получить возвращаемое значение измеряемой функции.
Другой метод, который вы можете использовать, это measureTime. This возвращает Durationobject. Durationпредлагает вам способы преобразования длительности в нужную вам единицу времени. Однако возвращаемое значение по-прежнему теряется:
Есть, конечно, лучшее решение.
Лучшее из обоих миров: MeasureTimedValue
Пока что я могу получить краткий синтаксис, но не возвращаемое значение или возвращаемое значение и раздутый синтаксис. К счастью, есть способ получить и то, и другое: measureTimedValue.
Вы можете пойти дальше и использовать еще одну классную функцию Kotlin, а именно деструктуризацию:
Это позволяет вам добавлять измерения времени в ваш код. Просто оберните его measureTimedValue и используйте деструктурирование Kotlin, чтобы получить продолжительность и результат кода за один раз.
Если вы посмотрите на код на GitHub, вы, вероятно, заметите аннотацию @OptIn(ExperimentalTime::class). Нам это нужно, потому что JetBrains пометила более продвинутые методы измерения времени как экспериментальные. В будущем методы могут изменить свое поведение или синтаксис. Вы должны помнить об этом. В любом случае, я бы не рекомендовал использовать эти методы в рабочем коде в долгосрочной перспективе.
Заключение
Измерить время выполнения в Kotlin очень просто. Вы можете просто подключить его по мере необходимости, не загрязняя свою область неоднозначными переменными.
Вот несколько полезных ссылок:
- Документация API kotlin.time
- Деструктуризация в Котлине
- Полный код на GitHub.
Спасибо за ваше время!
Want to Connect? Subscribe to my newsletter so you never miss a new post: https://verbosemode.dev/subscribe