
Летучая
29.12.2017
08:58:37


Кита
29.12.2017
09:27:35
1. Мы выбрали Xamarin - это уже не полноценный нейтив. Думаю, стоит смириться... в большинстве случаев долгая загрузка - это долгая загрузка в точке инициализации приложения: ioc, принудительные задержки(привет task.delay в сплешскрине андроида), доступ к бд, итд. Ну Aot мы здесь думаю исключаем, а вот с Jit тут у нас как раз и думаю проседает: много различных сборок, соответственно много подгрузок либ в рантайме. А связь с нетстандартом опять же здесь не вижу;
2. Тк мне интересно, я тоже взгляну на просадку производительности. А было бы здорово, если можно было бы как-то ознакомиться со сравнением производительности в портабл и в нетстандрте;
3. На мой взгляд, скорость загрузки приложения все таки это не производительность. Я думал, мб рантайм по-другому работает в нетстандарте.
Ps,
1. Mvvmcross пытается сделать точку инициализации асинхронной. https://github.com/MvvmCross/MvvmCross/pull/1370
2. Многие популярные нагет пакеты уже держат веху в сторону перехода в нетстандарт. Или они уже перешли. Поэтому
Стоит мб задуматься, тк переход на начальном этапе разработке намного легче, нежели уже в сформированном проекте;
3. А новичкам вообще не стоит знать разницу между 78, 259, 111. В нетстандарте все есть и не надо беспокоиться. Например, беспокоиться о том, что в ядро нужен HttpClient...
Рантайм и работает как раз по-другому http://www.mono-project.com/news/2016/11/29/mono-code-sharing/
Точку инициализации а точнее setContent можно сколько угодно делать асинхронной - это не поможет, потому что есть инициализация рантайма до OnCreate, которая включает в себя подключение всех dll. Кстати для меня до сих пор остается загадкой какого хрена в полном aot в пэкедж суются dll если по сути они больше не нужны
Ну и то что популярные нюгет пакеты перешли на стандарт это не аргумент. Удобство программиста это одно. Забота о пользователе это другое. Программист когда делает осознанное движение в сторону чего-то должен просчитать как это отразится на пользователях. Если негативно он это телодвижение делать не должен, а должен начать искать компромисс между своим личным удобством и удобством пользователя. Определенно мгновенный или почти мгновенный запуск аппы это положительный пользовательский опыт, который отражается на дальнейшем удержании пользователя. Думают ли про это создатели нюгет-пакетов? Нет конечно. Я утверждаю что почти мгновенная инициализация на платформе Xamarin достижима. Терять это преимущество я считаю расточительством.

Google

Serhii
29.12.2017
12:45:41
Всем привет. У меня есть ссылка, по которой картинки генерятся рандомно. Мне нужно чтобы по клику эта рандомная картинка подставлялась. В браузере тестил эту ссылку, она при обновлении страницы генерит каждый раз новую картинку. Но когда я меняю Source, картинка не обновляется. В чем может быть проблема?
private async void ChangeImage()
{
string imageURI = "http://lorempixel.com/400/200/sports/";
System.Uri uri;
System.Uri.TryCreate(imageURI, UriKind.Absolute, out uri);
Task<ImageSource> result = Task<ImageSource>.Factory.StartNew(() => ImageSource.FromUri(uri));
_img.Source = await result;
}
Проект на формс. ЮАЙ на шарпе

vladimir
29.12.2017
12:51:04
https://developer.xamarin.com/api/property/Xamarin.Forms.UriImageSource.CachingEnabled/
попробуй это false
а второй вариант ставь Source в null, потом опять в твою ссылку

Serhii
29.12.2017
12:52:30
Сорс в налл уже пробовал. не отработало. Сейчас попробую отменить кеширование

vladimir
29.12.2017
12:53:04
лучше приложение удалить и пересобрать, на всякий
не знаю, как кэширование работает

Serhii
29.12.2017
12:55:02
когда удалял и пересобирал, картинка новая подставлялась 1 раз, после чего кешировалась

vladimir
29.12.2017
12:56:42
я про то, что возможно убрать кэширование не достаточно, чтобы увидеть эффект сразу
это не опция, а дополнение к первому совету

Алексей
29.12.2017
13:13:53

Slava
29.12.2017
13:15:28

Google

Кита
29.12.2017
13:29:17

Алексей
29.12.2017
13:30:26


Кита
29.12.2017
13:31:18

Алексей
29.12.2017
13:32:00
Потому что если application долго выполняется, то пользователь видит чёрный экран.
А в случае сплеша, он видит сплеш скрин

Кита
29.12.2017
13:32:20
Более того белый экран или черный или сплэш это не важно. У многих современных апп нет никакого сплэша.

Алексей
29.12.2017
13:36:15

Кита
29.12.2017
13:36:57

Алексей
29.12.2017
13:36:57

Кита
29.12.2017
13:37:44
Блииин. Я расскажу как делают на самом деле

Алексей
29.12.2017
13:38:51
И чо?
В доке пишется, что этот метод должен проходить как можно быстрее, а с учётом регистрации там IOC контейнера и Jit получаем просадку производительности

Кита
29.12.2017
13:39:29
1-2 фрейма
зависит от девайса конечно

Летучая
29.12.2017
13:40:45
И от иока

Кита
29.12.2017
13:41:15
ну собственно да. я использую самый производительный контейнер - DryIoc

Алексей
29.12.2017
13:41:27

Кита
29.12.2017
13:41:40

Google

Алексей
29.12.2017
13:42:37

Кита
29.12.2017
13:44:15
Более того я замерял с IoC и без него - разницы на старте он сильной не дает. Разброс в рамках статистической погрешности
с DryIoc
плюс ко всему есть такая штука как кеширование в статическом методе typeof(T). тоже дает прирост на регистрации. https://stackoverflow.com/questions/353342/performance-of-object-gettype/353435#353435
В общем не так уж много надо чтобы оптимизацию провести
есть
public class MainApplication : Android.App.Application, Android.App.Application.IActivityLifecycleCallbacks

Алексей
29.12.2017
13:51:54

Кита
29.12.2017
13:53:01
public override void OnCreate()
{
base.OnCreate();
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
RegisterActivityLifecycleCallbacks(this);
}
все что из себя представляет OnCreate()
далее есть MainActivity с Theme = "@style/SplashTheme"
перед base.OnCreate(savedInstanceState); делаете SetTheme(Resource.Style.MainTheme);

Кита
29.12.2017
13:54:51
Все.
после base.OnCreate(savedInstanceState); появляется первый Resolve<IApplication>().Init();

Алексей
29.12.2017
13:55:28

Кита
29.12.2017
13:55:43
просто берете и сами замеряете

Алексей
29.12.2017
13:56:32

Летучая
29.12.2017
14:04:41
https://stackoverflow.com/questions/12607111/how-to-get-google-provided-android-resource-layout-references-in-my-mono-for-and/12875066#12875066 ух биля, вот почему андроид прожекты называют x.Droid вместо x.Android

Кита
29.12.2017
14:10:15

Google

Mykhail
29.12.2017
14:58:27
Коллеги, может кто в курсе? В какой момент VS for Mac перестала генерить .app файл для iOS приложения в iPhoneSimulator/debug, а начала кидать его в iPhoneSimulator/Debug/device-builds/{id}
Мучаюсь с UI тестами сейчас

Алексеев
29.12.2017
16:05:21

Mykhail
29.12.2017
19:30:21

Галузин
30.12.2017
10:40:32
Всем привет! подскажите плагин для скролинга ListView

Kirill
30.12.2017
11:27:14

Галузин
30.12.2017
11:37:54
имеется ввиду бесконечная прокрутка, с подгрузкой данных

Admin
ERROR: S client not available

Max
30.12.2017
11:43:56
Что тебе не нравится
Если хочешь чтобы оно ещё и работало быстро и не лагало, делай оптимизации.
Например, CachingStrategy настрой

Галузин
30.12.2017
11:47:28
да все нравится)) нужен плагин для подгрузки данных при прокрутке списка до конца

Max
30.12.2017
11:48:21
А, это из коробки не работает, один из банальных вариков - отслеживать до какого элемента отрисовано и загружать данные ещё

Галузин
30.12.2017
11:49:16
плагин все равно должен быть, стандартная задача должно быть уже хорошее решение что бы велосипед не придумывать

Max
30.12.2017
11:50:42
Не встречал, но люди подскажут, скорее всего уже есть все

Vlad
30.12.2017
13:27:05
здравствуйте. сталкивался ли кто-нибудь с проблемой в Genymotion то что если дебажить на нем в Debug, то все нормально, но если перевести проект на Releas, то пишет App, unfortunately has stopped ?

Алексеев
30.12.2017
14:27:28

Летучая
30.12.2017
18:43:00

Галузин
30.12.2017
19:42:32


Летучая
30.12.2017
20:13:22
Господа, пытаюсь запилить кастомный контролорендерер для XamarinForms. Делаю так:
[assembly: ExportRenderer(
typeof(IconLabel),
typeof(IconLabelRenderer))]
namespace X.Droid.Controls
{
[Preserve(AllMembers = true)]
public class IconLabelRenderer:LabelRenderer
{
protected override void OnElementChanged(
ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control == null || Element == null)
return;
string material = "MaterialIcons-Regular.ttf";
Control.Typeface = Typeface
.CreateFromAsset(
MainActivity.Current.Assets,
material);
Control.Text = ((IconLabel) Element).Icon;
}
}
}
Но ничего не работает, каждый раз получаю плевок в морду в виде "TargetInvokationException", который вообще непонятно откуда вылетел. Поймать это нечто не представляется возможным, try catch в активите не работает, try catch в функциях рендерера тоже. ЧЯДНТ? За что его дёрнуть, чтоб он проср#### и заработал? Спасибо.

Andriy
30.12.2017
20:32:33
/stat@combot

Google

Combot
30.12.2017
20:32:33
combot.org/chat/-1001078768598

Летучая
30.12.2017
20:39:31
<Label FontFamily="MaterialIcons-Regular.ttf#MaterialIcons-Regular" Text="" />
Так тоже не работает!
UPD:
Ой, ой! Тут ксамарин не виноват, это Рыба на нетрезвую голову кодирует!
<Label FontFamily="MaterialIcons-Regular.ttf#MaterialIcons-Regular" Text="" />
Вот так всё хорошо и правильно работает!

Vlad
30.12.2017
20:47:21


Combot
31.12.2017
04:50:42
combot.org/chat/-1001078768598

Maxim
31.12.2017
11:01:26
Всех с наступающим новым годом
Не подскажете русскоязычные ресурсы по XAML, видеокурсы
А ещё что-нибудь с Xamarin, кроме как metanit

Max
31.12.2017
16:06:49
С наступающим коллеги, счастья + здоровья

Artem
31.12.2017
17:58:10
С наступающим друзья превозмогатели)

Летучая
31.12.2017
17:58:52

Vladislav
31.12.2017
18:20:57
С наступающим, в следующем году будем превозмогать в два раза больше

Max
31.12.2017
18:21:32

Evgeniy
31.12.2017
18:21:37
С наступающим, товарищи! Всем творческих успехов) Счастья и здоровья)

NoNick
31.12.2017
20:33:17
/stat@combot

Combot
31.12.2017
20:33:17
combot.org/chat/-1001078768598

NoNick
31.12.2017
20:33:22
Здорова
Как у райдера с моногеймом/ксамарином?

Max
31.12.2017
20:34:10