首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含大量图像的嵌套列表框在WP7中抖动且速度很慢

包含大量图像的嵌套列表框在WP7中抖动且速度很慢
EN

Stack Overflow用户
提问于 2012-02-03 17:52:27
回答 2查看 607关注 0票数 0

为了让嵌套的列表框正常工作,我已经努力了两天,我在列表框中垂直放置了like类别,然后水平放置了图像。图像的数量可以很容易地达到1000-2000。下面是我的XAML代码:

代码语言:javascript
复制
        <ListBox x:Name="CategoryList"  VirtualizingStackPanel.VirtualizationMode="Recycling">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Grid Height="100" Width="480">
                            <Image HorizontalAlignment="Left" Width="80" Height="80" Margin="0,20,0,0" Source="/Images/listicons14.png"/>
                            <Rectangle HorizontalAlignment="Right" Width="390" Height="80" VerticalAlignment="Bottom" Fill="#FF7BB800"/>
                            <TextBlock Text="{Binding Category}" Margin="121,45,0,25" HorizontalAlignment="Left" Width="100"/>
                        </Grid>
                        <ListBox VirtualizingStackPanel.VirtualizationMode="Recycling" ItemsSource="{Binding Advertisements}" x:Name="Advertisement" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VirtualizingStackPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Height="220" Width="300">
                                        <Border BorderBrush="#FF7BB800" BorderThickness="3" HorizontalAlignment="Center" Width="275" Height="190" VerticalAlignment="Center">
                                            <Image Source="{Binding AdvertisementImage}" Width="275" Height="190"/>
                                        </Border>
                                    </StackPanel>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                        </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

这就是我现在如何填充它(这是作为调试目的,只使用三个不同的图片来填充它。图片的大小约为70kb,但我也测试了非常小的jpeg (每个10kb),没有任何影响。

代码语言:javascript
复制
        for (int i = 0; i < 20; i++)
        {
            ProductCategory productcategory = new ProductCategory { Category = "Book" + i.ToString() };
            productcategory.Advertisements = new List<Advertisement>();
            for (int j = 0; j < 10; j++)
            {
                productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/advGalaxyS2reduced.jpg", UriKind.Relative) });
                productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/adviphone4sreduced.jpg", UriKind.Relative) });
                productcategory.Advertisements.Add(new Advertisement { AdvertisementImage = new Uri("/Images/advLumia800reduced.jpg", UriKind.Relative) });

            }
            productcategories.Add(productcategory);
        }
        this.CategoryList.ItemsSource = productcategories;

我也已经用Telerik的Listbox测试过了,它肯定更好,但不是“可卖”的,所以我仍然想知道我在这里错过了更多。在我看来,数据虚拟化是开启的,如果我查看它消耗的RAM的数量。请帮我解决这个问题:)

EN

回答 2

Stack Overflow用户

发布于 2012-02-03 18:31:58

我怀疑是嵌套的列表框导致了问题,因为布局引擎需要在滚动时不断地重新测量所有内容。我希望将布局更改为具有固定项目大小的布局,然后看看是否仍然存在相同的问题。

以下是其他一些更通用的指针:

同时显示

  • 1000图像是一件很难的事情。如果您尝试这样做,您将遇到资源问题,充其量,这将影响整体性能。
  • 您应该始终致力于使用将在设备上显示的图像大小。这节省了时间(和处理资源):下载(如果合适)不超过所需的字节,加载不超过所需的字节,并且不必调整大小。
  • 小屏幕上的大量内容对用户来说很难找到他们正在寻找的东西。通常建议(有几个例外)将大列表分解为较小的类别。如果你想显示一个非常大的列表(或者一个未知大小的列表),你应该对数据进行虚拟化(
  • data )。这需要在任何时候只加载数据的一个子集(并且在用户浏览数据时加载换出was ),从而节省大量的时间和资源。
  • 始终通过监视项目的加载和卸载时间进行测试,以确保您的数据正在虚拟化。
票数 2
EN

Stack Overflow用户

发布于 2012-02-06 17:30:58

1000张图片也是别人说的lot..as。尝试使用lowProfileImage加载器

http://blogs.msdn.com/b/delay/archive/2010/09/02/keep-a-low-profile-lowprofileimageloader-helps-the-windows-phone-7-ui-thread-stay-responsive-by-loading-images-in-the-background.aspx

这不是您的问题的确切解决方案,但它可能会给您提供关于性能改进的想法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9126692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档