0

问题是对页面的第一次调用InitializeComponent非常慢。因此页面过渡动画第一次出现滞后。StackLayout在我的手机上,几个Labels 和一个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();
    }
}
4

0 回答 0