Xamarin表单列表视图内存不足错误
在Xamarin表单中,我有以下列表视图:Xamarin表单列表视图内存不足错误,xamarin,xamarin.forms,Xamarin,Xamarin.forms,在Xamarin表单中,我有以下列表视图: <ListView x:Name="StudentView" RowHeight="55" SeparatorVisibility="None" CachingStrategy="RecycleElement"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <G
<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项加载到列表视图中,尤其是在移动设备中,这样会降低应用程序性能。我会使用一些分页状态,并使用缩略图来减少内存消耗