首页 > 解决方案 > 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; 
    }

我忘了提到我通过命令行使用指定的页面和路径打开应用程序。

标签: c#xamluwpobservablecollection

解决方案


推荐阅读