如何在Xamarin UWP上释放ListView中的内存?
我有一个Xamarin.Forms UWP应用程序,其中有一个ListView。listView包含大型图像等内容。加载后不久,当我开始滚动ListView时,发生OutOfMemory异常。我尝试使用分页来缩小ListView,但是在单击Next几次之后,异常仍然发生。我想知道如何释放内存,例如单击“下一步”按钮 下面是一些代码:如何在Xamarin UWP上释放ListView中的内存?,listview,xamarin.forms,xamarin.uwp,Listview,Xamarin.forms,Xamarin.uwp,我有一个Xamarin.Forms UWP应用程序,其中有一个ListView。listView包含大型图像等内容。加载后不久,当我开始滚动ListView时,发生OutOfMemory异常。我尝试使用分页来缩小ListView,但是在单击Next几次之后,异常仍然发生。我想知道如何释放内存,例如单击“下一步”按钮 下面是一些代码: <StackLayout> <ListView x:Name="ProductView" Margin="20">
<StackLayout>
<ListView x:Name="ProductView" Margin="20">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding Front_Image, StringFormat='https://cdn.mysite.com{0}'}" Grid.Column="0" />
<Label Text="{Binding Name}" Grid.Column="1" FontAttributes="Bold" VerticalOptions="Center" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button x:Name="Prev" Text="Previous" Style="{StaticResource NavButton}" Clicked="OnPrevClicked" IsEnabled="false" />
<Button x:Name="Next" Text="Next" Style="{StaticResource NavButton}" Clicked="OnNextClicked" />
</StackLayout>
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类ProductsPage:ContentPage
{
//公共可观测集合乘积{get;set;}
private int PageNumber{get;set;}=1;
公共产品广告()
{
初始化组件();
ProductView.ItemsSource=Product.GetProducts(页码);
}
PrevClicked上的私有void(对象发送方、事件args args)
{
ProductView.ItemsSource=Product.GetProducts(--PageNumber);
Prev.IsEnabled=页码>1;
}
私有void OnNextClicked(对象发送方、事件参数)
{
ProductView.ItemsSource=Product.GetProducts(++PageNumber);
Prev.IsEnabled=真;
}
}
您可以做几件事
首先,我将替换本机的图像
,并使用类似的包
这个软件包为内存管理、缓存提供了现成的解决方案,这是一个很大的帮助
您还可以检查ListView缓存策略:RecycleElement,它将回收视图,而不是为每个元素创建多个ViewCell。您可以做几件事 首先,我将替换本机的
图像
,并使用类似的包
这个软件包为内存管理、缓存提供了现成的解决方案,这是一个很大的帮助
您还可以查看ListViews缓存策略:RecycleElement,它将回收视图,而不是为每个元素创建多个ViewCell。谢谢,我会尝试并告诉您结果。很好,很高兴我能提供帮助:)除了@BrunoCaceiro回答:我,我在内存优化方面遇到了一些问题,因此我还使用了一个释放params内存的
IDisposable
接口实现。谢谢,我会尝试一下,并告诉你结果。很好,很高兴我能提供帮助:)除了@BrunoCaceiro回答:我,我在内存优化方面遇到了一些问题,因此我还使用了一个IDisposable
接口实现来释放params内存。
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ProductsPage : ContentPage
{
//public ObservableCollection<Product> Products { get; set; }
private int PageNumber { get; set; } = 1;
public ProductsPage ()
{
InitializeComponent();
ProductView.ItemsSource = Product.GetProducts(PageNumber);
}
private void OnPrevClicked(object sender, EventArgs args)
{
ProductView.ItemsSource = Product.GetProducts(--PageNumber);
Prev.IsEnabled = PageNumber > 1;
}
private void OnNextClicked(object sender, EventArgs args)
{
ProductView.ItemsSource = Product.GetProducts(++PageNumber);
Prev.IsEnabled = true;
}
}