Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Dalvik vs Xamarin: так ли дрянен Xamarin?

Anna | 17.06.2014 | нет комментариев
Написать эту статью меня всподвигло суждение, что xamarin – это что-то неповоротливое, огромное, длинно загружается (при сопоставлении с нативными инструментами разработки) и при это невозможно написать план в жанре «write once – run everywhere» как это предлагают инструменты типа PhoneGap. К сожалению, я обратил внимание на Xamarin вовсе незадолго следственно допускаю вероятность, что прежде оно было огромным и тормозным. Давайте же подробнее взглянем как обстоят дела на нынешний момент c Xamarin.Android.

Как оно работает?

Не буду детально на этом останавливаться, довольно знаменито это описано на официальном сайте ну либо вэтой статье на прогре. Значимо лишь понимать, что это не какой-то там инструмент над Dalvik – это полновесная альтернатива. Отлично ясно это из этой знаменитой картинки.

Это обозначает, что в теории оно работает не дрянней «родных» приложений. На практике же приложениям на Xamarin доводится таскать за собой свой рантайм и пользоваться peer-объектами для связи с JVM. Посмотрим как это влияет на продуктивность.

Размер приложения

Внятное дело, что приложение будет весить огромнее чем аналог на нативном инструменте разработки под определенную платформу т.к. xamarin тянет за собой рантайм, но давайте же узнаем его размер на примере Android “Hello world” приложения с одной кнопкой и TextView. Тут нам поможет Linker, тот, что легко вырежет всё, что нам не необходимо (к сожалению, он слегка туповат и может вырезать надобное, следственно изредка дозволено увидеть что-то как бы такого в планах: LinkerPleaseInclude.cs либо xml-конфиги) и в результате apk с Hello world станет весить менее 2 Мб (с включенным AOT) — по-моему, это дюже даже недурно.

Сопоставление продуктивности

Для тестирования применялись следующие устройства:

  • Samsung Galaxy S3 (как один из самых знаменитых Android телефонов)
  • Samsung Galaxy Tab (x86 зодчество)
  • Asus Nexus 7 2013 (как устройство, на котором дозволено включить ART взамен Dalvik)

Тесты прогонялись несколько раз для вычисления среднего (подробнее – глядите код) итога. В Android Studio собиралась релизная подписанная apk, в Xamarin – release с включенным полным линкером AOT (правда я не подметил разницы с ним и без).
Раньше чем мы начнем гонять какие-нибудь непонятные тесты в жанре вычисления миллионного знака в числе «пи» я хотел бы легко по-обывательски показать то, что волнует пользователя непринужденно – это скорость запуска и плавность пролистывания большого списка элементов. чай именно это нервирует лично меня в приложениях написанных на инструментах типа PhoneGap – ты приобретаешь топовый телефон с 4-8 ядрами Дабы видеть лагающую прокрутку на не особенно трудных формах и длинный запуск. Буду рад добавить в видео вариант на PhoneGap либо Titanium если кто-нибудь напишет ;-) .

Как видно из видео, примитивное приложение на JAVA стартует (леденящий старт) фактически молниеносно, в то время как Xamarin имеет задержку в одну секунду – в тезисе не так ужасно, но раунд записываем за JAVA. В реальных приложениях скорость загрузки даже на JAVA может занимать бОльшее время, и разница в одну секунду будет скорее как погрешность – все равно придется показывать сплэшскрин. Плавность скроллинга идентично отличная, правда в аналогичном примере на Windows Phone она была бы ещё плавнее ;-) . Дальше проведем серию сферических в вакууме тестов чтобы вбросить холиварчик:

1. Арифметические операции

Легко комплект каких-то операций с числами, в том числе перемножения чисел с плавающей точкой.
Исходник на JAVA
Исходник на C#

Итоги (числа тут и дальше – время выполнения в миллисекундах)

Итоги:
1) Добросовестно говоря, я ждал что Xamarin на x86 проявит себя отменнее, а здесь печальный итог.
2) На обыкновенном arm устройстве итоги приблизительно идентичные
3) Включение ART на Nexus 7 примерно в 1.5 раза ускорило выполнение теста!

2. Работа с коллекциями

В этом тесте мы легко создаем коллекцию контейнеров, которую после этого фильтруем по определенном знаку и получаем на выходе новую коллекцию.
Исходник на JAVA
Исходник на C#

Итоги:
На самом деле данный тест – легко укол в больное место JAVA в которой нет custom value types (ключевое слово struct в C#). Но увлекателен итог на ART – примерно в 2 раза стремительней Dalvik. Но не стоит воспринимать это как шутку – разрабатывая игры на Xamarin мы не раз получали внушительный приход продуктивности заменив классы на конструкции.

3. Работа со строками

Здесь мы создаем дюже огромную строку, над которой исполняем некоторые действия.
Исходник на JAVA
Исходник на C#

Итоги:
Тест показывает, что работа со строками больше результативна в Xamarin (правда стоило ещё посмотреть на память), вновь же на ART итоги отменнее. Что увлекательно, первоначально в тесте не применялся StringBuilder (в обоих платформах) и разница была легко грандиозной в пользу Xamarin.

В качестве завершения…

Абсолютно верно не стану утверждать, что Xamarin – лучшее средство для разработки под Android – это вдалеке не так. Здесь и ещё немного функциональная IDE, в которой трудно разрабатывать интерфейс для андроид из-за отсутствия подсказчика – доводится писать его в Android Studio, а потом пользоваться секретной техникой copy-paste, благо java и C# уж дюже “похожи” ;-) , изредка отваливается отладчик (на некоторых устройствах с определенной версией ОС), а если взглянуть в багзиллу то от некоторых открытых багов может стать не по себе. Но темпы становления и вероятность писать всеобщую кроссплатформенную логику разрешают закрыть на это глаза и писать стремительные и отзывчивые приложения (камень в огород PhoneGap) под все платформы.
Репозиторий с тестами здесь. Теснее кто-то даже сделал пул-реквест на добавление варианта с MvvmCross :-) .

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB