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 關注
- 556 瀏覽
添加回答
舉報
