LongListSelector:由于预加载导致性能不佳

本文关键字:性能 加载 于预 LongListSelector | 更新日期: 2023-09-27 18:11:57

我想发布一个应用程序并使用Store-Test-kit进行测试。我的一个透视视图包含某种新闻页面,它总是从服务器获取30个新闻元素。在我的屏幕上有大约5条新闻的空间,但它仍然预装了17-18条新闻,并因此而挂起。我使用itemrealize/itemunrealize侦听器对其进行测试。

这是有点愚蠢,由于自动行为的Test-Kit告诉我这是我的错,应用程序有这么糟糕的响应D:

有没有办法让它加载更少的新闻?如果我将一个新闻设置为400像素高,它将加载5-6个新闻并且不会挂起。当然,添加空格不是最好的解决方案=/

是的,我的新闻都有图片。但是当我把它注释掉时,它仍然挂起。18 .新闻太多了,一次加载不了。

编辑:

我正在异步获取数据并绑定它。.xaml:

<phone:LongListSelector x:Name="NewsSelector" LayoutMode="List" IsGroupingEnabled="False" ItemsSource="{Binding OnlineNews}" SelectionChanged="News_LongListSelector_SelectionChanged">
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <Grid VerticalAlignment="Top" HorizontalAlignment="Left" >
                <!--...-->
                <Image Source="{Binding TeaserImage}" Width="120" Height="120" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.RowSpan="3" />
                <StackPanel Grid.Column="1" Margin="6,0,0,0">
                    <TextBlock Text="{Binding Title}" TextWrapping="Wrap" MaxHeight="54" TextTrimming="WordEllipsis" Style="{StaticResource PhoneTextAccentStyle}" FontFamily="Verdana" FontSize="22" VerticalAlignment="Top" HorizontalAlignment="Left"/>
                    <TextBlock Text="{Binding TeaserText}" TextWrapping="Wrap" MaxHeight="44" TextTrimming="WordEllipsis" Style="{StaticResource PhoneTextTitle3Style}" FontFamily="Verdana" FontSize="18" VerticalAlignment="Top" HorizontalAlignment="Left"/>
                    <TextBlock Text="{Binding PubDate}" Margin="12,4,0,4" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="Verdana" FontSize="18" VerticalAlignment="Top" HorizontalAlignment="Left"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

和ViewModel .cs:

public void LoadNewsPage()
{
    this.IsLoadingNews = true;
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(NEWS_URL));
    request.BeginGetResponse(new AsyncCallback(NewsCallback), request);
}
private void NewsCallback(IAsyncResult asynchronousResult)
{
    try
    {
        //...
        foreach (var d in list.news)
        {
            //...
            OnlineNews.Add(new OnlineNewsViewModel() {
                //...
            });
        }
    }
    catch
    {
        //...
    }
}

但是我从哪里得到数据并不重要。当我在另一个页面上等待直到所有新闻加载,然后切换->创建18个新闻与1图像和3个文本块->挂起时,它也会口吃。在性能更高的Lumia 1320上效果更好。但是我没有机会在Lumia 520上运行这个没有口吃…

LongListSelector:由于预加载导致性能不佳

确保将图像设置为这样的背景加载:

<Image Height="100" Width="100" Margin="12,0,9,0">
  <Image.Source>
    <BitmapImage UriSource="{Binding ImgURL}" CreateOptions="BackgroundCreation"/>
  </Image.Source>
</Image>