Stiamo provando a rilasciare alcune App produttive con Xamarin.Forms ma uno dei nostri problemi principali è la lentezza generale tra la pressione dei pulsanti e la visualizzazione dei contenuti. Dopo alcuni esperimenti, abbiamo scoperto che anche un semplice ContentPage
con 40 etichette prendono più di 100 ms per presentarsi:Perché Xamarin.Forms è così lento durante la visualizzazione di alcune etichette (specialmente su Android)?
public static class App
{
public static DateTime StartTime;
public static Page GetMainPage()
{
return new NavigationPage(new StartPage());
}
}
public class StartPage : ContentPage
{
public StartPage()
{
Content = new Button {
Text = "Start",
Command = new Command(o => {
App.StartTime = DateTime.Now;
Navigation.PushAsync(new StopPage());
}),
};
}
}
public class StopPage : ContentPage
{
public StopPage()
{
Content = new StackLayout();
for (var i = 0; i < 40; i++)
(Content as StackLayout).Children.Add(new Label{ Text = "Label " + i });
}
protected override void OnAppearing()
{
((Content as StackLayout).Children[0] as Label).Text = "Stop after " + (DateTime.Now - App.StartTime).TotalMilliseconds + " ms";
base.OnAppearing();
}
}
Soprattutto su Android si ottiene è peggio i più etichette si sta cercando di visualizzare. Il primo pulsante premuto (che è fondamentale per l'utente) richiede anche ~ 300 ms. Abbiamo bisogno di mostrare qualcosa sullo schermo in meno di 30 ms per creare una buona esperienza utente.
Perché ci vuole così tanto tempo con Xamarin.Forms
per visualizzare alcune etichette semplici? E come risolvere questo problema per creare un'app per la spedizione?
Esperimenti
Il codice può essere biforcuta su GitHub a https://github.com/perpetual-mobile/XFormsPerformance
Ho anche scritto un piccolo esempio per dimostrare che il codice simile utilizzando le API native da Xamarin.Android è significativamente più veloce e fa non si ottiene più lento quando si aggiunge più contenuti: https://github.com/perpetual-mobile/XFormsPerformance/tree/android-native-api
Il team di assistenza Xamarin ha creato un problema di bugzilla: https://bugzilla.xamarin.com/show_bug.cgi?id=23822 – Rodja