Оптимизация загрузки объёмного Page в Xamarin.Forms
Xamarin.Forms, нацеленный на Android/iOS, один из компонентов - мессенеджер, внешне подобный телеграм/вацап. Страница чата - ScrollView с вложенным StackLayout - контейнером сообщений. Под скроллом поле для ввода и больше ничего, т.е. страница элементами не перегружена. Формирую список сообщений по принципу (упрощенно, но достаточно для понимания):
foreach (var message in messageList)
ContentLayout.Children.Add(new MessageItem
{
Autor = message.Autor,
Text = message.Text,
Time = message.Time.ToString("HH:mm")
});
где MessageItem - кастомный элемент на основе StackLayout, Frame и Label, на одно сообщение - не больше 8 элементов и глубиной вложенности не более 3 (зависит от условий, типа статуса сообщения).
Когда я уже нахожусь на странице и делаю запрос на загрузку, скажем, последних 50 сообщений, загрузка происходит быстро, сообщения появляются все разом и задержка не ощутима, поток интерфейса не подвисает. Даже когда загружено несколько сотен сообщений - подвисаний и лагов нет.
Но если открываю страницу с уже заранее загруженными теми же 50 сообщениями - даже в эмуляторе на хорошем железе, пока эти 50 элементов сгенерятся и добавятся на страницу - получаю подвисание интерфейса на секунду-полторы, в течение которых наблюдаю белый экран. Добавление элементов происходит сразу после InitializeComponent.
Есть мысль хранить сообщения в отдельном списке как готовый набор элементов и загружать их сразу как StackLayout.Children = myList; но выглядит не очень элегантно. Другая мысль - вынос процесса "добавления" в отдельный поток и отображение ActivityIndicator во время "генерации", но что-то подсказывает что сообщений и вообще новых элементов не так много для столь заметной задержки при открытии страницы.
Небольшое пояснение: запрос списка сообщений происходит в другом классе, задолго ДО перехода на страницу чата, т.е. время выполнения запроса на загрузку страницы не влияет, к этому моменту я уже имею готовый список сообщений, из которых нужно сформировать страницу.
В общем, получился не вопрос, а просьба поделиться опытом, как сделать правильно и оптимизировать процесс генерации вьюхи из множества однотипных элементов