加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-phone-7 – wp7 – 带有大量文本的TextBlock – 巨大的

发布时间:2020-12-13 20:26:26 所属栏目:Windows 来源:网络整理
导读:我的应用程序有问题,我不知道它是否正常. 我的应用程序中有一个需要显示大量文本(2000-4000个字符)的文本块.无论如何我有2048像素的限制,所以我的文字被裁剪,这没问题,我用这个: http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable
我的应用程序有问题,我不知道它是否正常.
我的应用程序中有一个需要显示大量文本(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读