3 回答
TA贡献1789条经验 获得超10个赞
哦,最近我整天杀了这个,使它正常工作!
所以解决方案是:
使您的图像控件免费资源。所以设置
BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;
如前所述。
确保在列表的每个项目上虚拟化_bitmap。您应该按需加载它(LongListSelector.Realized方法),并且必须销毁它!它不会自动收集,并且GC.Collect也不能工作。空引用也不起作用:(但是这里是方法:制作1x1像素文件。将其复制到程序集中并从中获取资源流以处置1x1像素为空白的图像。将自定义处置方法绑定到LongListSelector.UnRealized事件(e。容器处理您的列表项)。
public static void DisposeImage(BitmapImage image)
{
Uri uri= new Uri("oneXone.png", UriKind.Relative);
StreamResourceInfo sr=Application.GetResourceStream(uri);
try
{
using (Stream stream=sr.Stream)
{
image.DecodePixelWidth=1; //This is essential!
image.SetSource(stream);
}
}
catch { }
}
在LongListSelector中为我工作,每个图像有1000张宽度为400的图片。
如果您错过了数据收集的第2步,则可以看到良好的结果,但是在滚动100-200个项目后内存溢出。
- 3 回答
- 0 关注
- 504 浏览
添加回答
举报