c# – ListView内存泄漏Windows Phone 8.1?
我有一个ListView绑定到ObservableCollection对象(包含图像URI),当我向ListView添加更多项目时,我看到内存中出现了大量的峰值.我想我已经将其缩小到UserModel的imageUri的问题.见下文.
public class UserModel : ObservableObject { ... private string _imageUri; ... ... public string ImageUri { get { return _imageUri; } set { Set(() => ImageUri,ref _imageUri,value); } } } 照片模型 public class PhotoModel : ObservableObject { ... private UserModel _user; private string _imageUri; ... ... public UserModel User { get { return _user; } set { Set(() => User,ref _user,value); } } public string ImageUri { get { return _imageUri; } set { Set(() => ImageUri,value); } } } ListView的Xaml绑定 <ListView x:Name="MostPopularListView" ItemsSource="{Binding PhotosCollection}" ItemTemplate="{StaticResource MostPopularDataTemplate}" Margin="0,0" IsItemClickEnabled="True"/> 列表视图模板 ... <Image Source="{Binding ImageUri}" Stretch="Fill" Height="300" /> ... <Ellipse Width="40" Height="40" Margin="10,10"> <Ellipse.Fill> <ImageBrush> <ImageBrush.ImageSource> <BitmapImage UriSource="{Binding User.ImageUri}" /> </ImageBrush.ImageSource> </ImageBrush> </Ellipse.Fill> </Ellipse> ... 如您所见,我的ListView数据模板有两个图像,一个用于实际照片,另一个用于用户.两者都显示正确,但当我继续向列表中添加更多项目时,我看到内存大量飙升. 见图: 但是,如果我没有设置UserModel.imageUri(UserModel.imageUri为null,那么对于所有PhotoModel)我没有看到内存中的这个峰值. 两个配置文件正在执行加载相同图像的相同操作(总共15个).第一张照片是用户照片,第二张截图没有. 我认为问题与PhotoModel有UserModel和做Set(…)有关.从下面的照片中可以看出,属性更改事件处理程序的计数为140. 其中大部分都是PhotoModels,但我在集合中最多只有15个PhotoModels.我确实使用两种扩展方法清除并重新添加(可能导致它). public static void Repopulate<T>(this ICollection<T> collection,IEnumerable<T> items) { collection.Clear(); foreach (var item in items) { collection.Add(item); } } public static void AddObjects<T>(this ICollection<T> collection,IEnumerable<T> items) { foreach (var item in items) { collection.Add(item); } } 我真的很感激如何更好地处理性能,如果这是内存泄漏. 解决方法
问题在于ImageBrush如何解码较大的图像.您需要设置BitmapImage的DecodePixelHeight和DecodePixelWidth
信用:http://timheuer.com/blog/archive/2015/05/06/making-circular-images-in-xaml-easily.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |