我需要编写自己的pdf查看器(UserControl)。我使用pdfium.dll。它的包装是PdfiumService。此服务可以将页面呈现给BitmapSource。 PdfViewer在ScrollViewer中的VirtualizingStackPanel中显示页面。 任何想法我怎么能懒惰渲染pdf?问题是如果pdf大约是20mb(1000页),渲染页面需要大约2GB RAM。
VirtualizingStackPanel可以帮助我吗?我没有找到“BeginVirtualizing”或其他任何事件。有什么简单的方法可以知道现在正在显示什么项目吗?
也许是这样的:
是否有任何现成的解决方案或一些提示或想法?
答案 0 :(得分:0)
事实上,如果你使用VirtualizingStackPanel它只会管理gui元素来创建或销毁,但是如果你在内存中有一个完整的位图集合,你就死定了。
一种方法是创建页面对象whitout位图,并在需要时创建图像+添加一个清除所有“最旧图像”的计时器
private BitmapImage _Image = null;
/// <summary>
/// the image
/// </summary>
public BitmapImage Image
{
get
{
if (_Image == null)
_Image = (DocumentFactory.Instance.GetService(Parent) as BookService).GetImageFromStream(Parent.FilePath, FilePath);
ImageLastAcces = DateTime.Now;
return _Image;
}
set { _Image = value; }
}