如何在Xamarin UWP上释放ListView中的内存?

如何在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">

我有一个Xamarin.Forms UWP应用程序,其中有一个ListView。listView包含大型图像等内容。加载后不久,当我开始滚动ListView时,发生OutOfMemory异常。我尝试使用分页来缩小ListView,但是在单击Next几次之后,异常仍然发生。我想知道如何释放内存,例如单击“下一步”按钮

下面是一些代码:

    <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;
    }
}