Xamarin表单列表视图内存不足错误

Xamarin表单列表视图内存不足错误,xamarin,xamarin.forms,Xamarin,Xamarin.forms,在Xamarin表单中,我有以下列表视图: <ListView x:Name="StudentView" RowHeight="55" SeparatorVisibility="None" CachingStrategy="RecycleElement"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <G

在Xamarin表单中,我有以下列表视图:

<ListView x:Name="StudentView"  RowHeight="55"  SeparatorVisibility="None" CachingStrategy="RecycleElement">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="55"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <Image Source="{Binding Image}" Grid.Row="0" Grid.Column="0" Aspect="AspectFill"></Image>
                    <Image Source="{Binding Image}" Grid.Row="0" Grid.Column="1" Aspect="AspectFill"></Image>
                </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在代码隐藏中,我声明了一个包含1000项的数组

问题是,如果我在listview上下滚动,每次我在xamarin配置文件中看到内存使用量增加,似乎CachingStrategy=“RecycleElement”无法正常工作(在真正的android设备上测试)

滚动一段时间后,程序因内存不足而崩溃


有什么问题吗?如何解决此问题?

不确定如何设置列表视图的ItemSource,或者它是什么。还可以显示一些用于此目的的代码隐藏文件


作为一种盲目的猜测,若你们的资源是不可索引的,那个么回收可能会有性能问题。Xamarin建议对itemsource使用IList,使用IEnumerable之类的东西会导致大型数组的性能问题,因为它必须在数据中不断循环以找到正确的显示项。

不确定如何设置列表视图的itemsource,或者它是什么。还可以显示一些用于此目的的代码隐藏文件


作为一种盲目的猜测,若你们的资源是不可索引的,那个么回收可能会有性能问题。Xamarin的建议是对itemsource使用IList,使用IEnumerable之类的东西会导致大型数组的性能问题,因为它必须在数据中不断循环以找到合适的显示项。

1000个图像项太多了!我打赌这是Android,我建议使用不同的解决方案,如:

1.-分页策略(加载10,再加载10,以此类推)。 2.-缩小图像尺寸。 3.-使用可缓存图像,如: 4.-使用回收器视图实现视图自定义渲染器

关于如何提高ListView性能的话题越来越广泛,下面是一些有用的链接:

-

-

-


-1000个图像项目太多了!我打赌这是Android,我建议使用不同的解决方案,如:

1.-分页策略(加载10,再加载10,以此类推)。 2.-缩小图像尺寸。 3.-使用可缓存图像,如: 4.-使用回收器视图实现视图自定义渲染器

关于如何提高ListView性能的话题越来越广泛,下面是一些有用的链接:

-

-

-


-

我也遇到了同样的问题,大量图像或分辨率高的图像导致了这个问题,我通过使用
FFImageLoading
found解决了这个问题,也可以在上找到,如果可能的话,还可以尝试绑定缩略图而不是实际图像

<ContentPage xmlns:ci="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms">
<ci:CachedImage Source="{Binding ActualImageThumbnail}" Aspect="Fill"/> 

我也遇到了同样的问题,大量图像或分辨率高的图像导致了这个问题,我通过使用
FFImageLoading解决了这个问题,也可以在上找到,如果可能的话,还可以尝试绑定缩略图而不是实际的图像

<ContentPage xmlns:ci="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms">
<ci:CachedImage Source="{Binding ActualImageThumbnail}" Aspect="Fill"/> 


在图像不同时也有效?例如,我有1000个不同的图像,我假设FFImageLoading库缓存了所有图像。我的问题是,在上下滚动的过程中,内存会增加,而不是保持不变(使用listview中的回收策略)。是的,它会工作,我有一个具有大量唯一图像的列表视图(但少于200),当上下滚动时,它会导致
outOfMemory
异常。此外,我不建议将1000个项目加载到列表视图中,尤其是在移动设备中,这样会降低应用程序性能。我会使用一些分页状态,并使用缩略图来减少内存消耗。如果图像不同,也可以这样做?例如,我有1000个不同的图像,我假设FFImageLoading库缓存了所有图像。我的问题是,在上下滚动的过程中,内存会增加,而不是保持不变(使用listview中的回收策略)。是的,它会工作,我有一个具有大量唯一图像的列表视图(但少于200),当上下滚动时,它会导致
outOfMemory
异常。此外,我不建议将1000项加载到列表视图中,尤其是在移动设备中,这样会降低应用程序性能。我会使用一些分页状态,并使用缩略图来减少内存消耗