问题是对页面的第一次调用InitializeComponent
非常慢。因此页面过渡动画第一次出现滞后。StackLayout
在我的手机上,几个Label
s 和一个Grid
可能需要 70 毫秒。我从页面中删除了几乎所有内容并试图找到一个瓶颈,但似乎即使是一个空网格也会增加大量时间。所以我的整个页面大约需要 180 毫秒,当它第一次加载时几乎没有动画,它看起来像一个冻结的应用程序。连续动画大约需要 15~20 毫秒。
回答您的潜在问题:是的,我启用了 XAML 编译。是的,我尝试过Release
构建,但没有太大帮助。
更新
我在 Visual Studio 中创建的默认 Xamarin 应用程序的项目详细信息中添加了一个按钮和一个静态网格。
这是页面的当前内容:
<StackLayout Spacing="20" Padding="15">
<Label Text="Text:" FontSize="Medium" />
<Label Text="{Binding Text}" FontSize="Small"/>
<Label Text="Description:" FontSize="Medium" />
<Label Text="{Binding Description}" FontSize="Small"/>
<Button Text="{Binding Text}" />
<Grid RowSpacing="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="Coins:" FontAttributes="Bold" />
<Label Grid.Row="0" Grid.Column="1" Text="111" HorizontalTextAlignment="End" />
<Label Grid.Row="0" Grid.Column="2" Text="Total coins:" FontAttributes="Bold" />
<Label Grid.Row="0" Grid.Column="3" Text="100000" HorizontalTextAlignment="End"/>
<Label Grid.Row="1" Grid.Column="0" Text="Gold:" FontAttributes="Bold" />
<Label Grid.Row="1" Grid.Column="1" Text="222" HorizontalTextAlignment="End" />
<Label Grid.Row="1" Grid.Column="2" Text="Table gold:" FontAttributes="Bold" />
<Label Grid.Row="1" Grid.Column="3" Text="120 " HorizontalTextAlignment="End"/>
</Grid>
</StackLayout>
这就是我测量时间的方式:
public partial class ItemDetailPage : ContentPage
{
public ItemDetailPage()
{
var start = DateTime.Now.ToUniversalTime().Millisecond;
InitializeComponent();
var end = DateTime.Now.ToUniversalTime().Millisecond;
Debug.WriteLine($"ItemDetailPage.InitializeComponent: {end - start}");
BindingContext = new ItemDetailViewModel();
}
}