我正在开发一个Universal Win App,这个问题出现在两个平台上。我有一个带有产品的 ObservableCollection ,对象属性是从xaml DataTemplate 绑定的,ObservableCollection被设置为ItemsSource到 GridView 。
private ObservableCollection<Product> productList = new ObservableCollection<Product>();
绑定的产品也有图像。
<Image
CacheMode="BitmapCache"
Source="{Binding ImageUrl}"
Stretch="Uniform" />
GridView的
<ScrollViewer
x:Name="ProductList_GridView_ParentScrollViewer"
VerticalScrollBarVisibility="Hidden"
Grid.Row="1">
<StackPanel
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Viewbox
AllowDrop="False"
ScrollViewer.HorizontalScrollMode="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollMode="Disabled"
Stretch="UniformToFill">
<GridView
x:Name="ProductList_GridView"
Margin="15,9.5,15,0" />
</Viewbox>
</StackPanel>
</ScrollViewer>
此外,我还有一种分页设置,每次可滚动高度等于垂直偏移时都会发出请求。我通过
向 ObservableCollection 添加新项目foreach (var item in requestResult.products)
{
productList.Add(item);
}
这似乎工作正常,直到我达到一定数量的项目。之后,应用程序崩溃了。在崩溃2GB ram设备之前,我的应用程序内存消耗高达800Mb。在512Mb ram上它早先崩溃了很多。
我该如何解决这个问题?我是否需要改变这种分页的方式。或者可以通过微小的变化来修复。我想问题出在Image上,但不确定。是不是 CacheMode =&#34; BitmapCache&#34; 应该修复内存问题?
答案 0 :(得分:1)
您的GridView
virtualization已被破坏,因为您将其包裹在ScrollViewer
中,并且所有项目都会立即呈现(并使用更多内存)。
如果您只留下以下XAML
,则不会再出现内存问题:
<GridView
x:Name="ProductList_GridView"
Margin="15,9.5,15,0" />