我有一个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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。