windows-phone-7 – wp7 – 带有大量文本的TextBlock – 巨大的内存使用 – 如何避免它?

前端之家收集整理的这篇文章主要介绍了windows-phone-7 – wp7 – 带有大量文本的TextBlock – 巨大的内存使用 – 如何避免它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序有问题,我不知道它是否正常.
我的应用程序中有一个需要显示大量文本(2000-4000个字符)的文本块.无论如何我有2048像素的限制,所以我的文字被裁剪,这没问题,我用这个: http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx.

问题是文本越长,消耗的内存就越多.如果没有来自上面链接的很长的文本黑客,文本块消耗大约10mb的内存!
如果我使用上面链接中的ScrollableTextBlock,内存量将进一步增加,最高可达30-40 mb ..没有限制.
因此,内存使用似乎与绘制的区域有关…

有没有办法减少长文本的内存使用? BitmapCach与此问题有什么关系,我可以禁用它吗?您可以通过添加一个包含很长文本的文本块来轻松地重现此问题,并且您可以使用此代码检查内存使用情况,您将看到只有1个带有长文本的文本块,峰值内存会增加10mb或更多:

long deviceTotalMemory = (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory");
        long applicationCurrentMemoryUsage = (long)DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage");
        long applicationPeakMemoryUsage = (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage");

        Debug.WriteLine("### deviceTotalMemory             : " + deviceTotalMemory);
        Debug.WriteLine("### applicationCurrentMemoryUsage : " + applicationCurrentMemoryUsage);
        Debug.WriteLine("### applicationPeakMemoryUsage    : " + applicationPeakMemoryUsage);
我在创建 Overflow7时遇到了类似的问题

我遇到的问题与如下事实有关:如果你在ScrollViewer中使用StackPanel,那么ScrollViewer坚持要渲染所有的StackPanel,而不仅仅是可见部分.

我读了四遍,有两个一般的解决方案:

>使用UI虚拟化技术 – 例如VirtualizingStackPanel
>使用数据虚拟化技术 – 例如制作自己的分页

为了解决这个问题,我在Overflow7中使用了ListBoxes而不是ScrollViewer / StackPanel组合. ListBox的内部部分使用VirtualizingStackPanel – 这个VirtualizingStackPanel在屏幕上呈现的只是什么,而不是整个可滚动的客户区域.

这有点“hacky”但运作良好.如果你有时间,那么我相信更好的解决方案是改进ScrollableTextBlock实现,以便它使用VirtualizingStackPanel – 有关于如何使用它的好帖子(例如)WPF VirtualizingStackPanel for increased performance

猜你在找的Windows相关文章