c# - ObservableCollection 不虚拟化数据?
问题描述
我想在我的收藏中添加大约 600 张图像,以便在使用 Itemsstackpanel 虚拟化的 Listview 中显示它们。如果我没有误读虚拟化,它可能会加载大型数据集。我的问题是该集合只能容纳大约 150 张图像,然后我得到了 OutOfMemory 异常。是否有更多的东西可以启用虚拟化,或者我的 Collection 为每个添加的图像调用其 propertyChanged 事件的问题?
错误被抛出:
await pdfPage.RenderToStreamAsync(Imagestream);
以及我如何添加到我的收藏中:
for (uint i = convertedPageString; i < 200 + convertedPageString; i++)
{
Image img = await LoadPage(l_document, i);
collection.Add(img);
g_rootPage.ListViewControl.ItemsSource = collection;
}
convertPageString 只是程序打开时开始的页面。
编辑:
这是我获取页面的功能。
public async Task<Image> LoadPage(PdfDocument a_document, uint page)
{
Image l_image;
BitmapImage l_bitmap;
PdfPage pdfPage;
using (IRandomAccessStream Imagestream = new MemoryStream().AsRandomAccessStream())
{
using (pdfPage = a_document.GetPage(page))
{
await pdfPage.RenderToStreamAsync(Imagestream);
l_bitmap = new BitmapImage();
await l_bitmap.SetSourceAsync(Imagestream);
l_image = new Image();
l_bitmap.DecodePixelHeight = 1200;
l_bitmap.DecodePixelWidth = 1000;
l_image.Source = l_bitmap;
l_image.Margin = new Thickness(0, 5, 0, 10);
}
}
return l_image;
}
我忘了提到我通过命令行使用指定的页面和路径打开应用程序。
解决方案
推荐阅读
- javascript - 子组件的道具没有更新
- azure - 机器人频道注册确实移动到其他资源组
- javascript - 如何让数组中的对象将其读取为 toUpperCase?
- dax - Power BI - 计算前一天交易量和第二天交易量之间的差异
- javascript - 如何在两个条件下使用 Javascript array.find()?
- c# - 如何在 groupBox 控件之间添加间隙?
- javascript - Javascript:循环中的 element.click()
- java - 回到程序的开始
- optimization - 假设不同函数中的两个 llvm::Values*s 相等
- matlab - 从函数评估变量并将新变量分配到基本工作区