gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:35:22 25 4
gpt4 key购买 nike

我的应用程序有问题,不知道是否正常。我的应用程序中有一个文本 block 需要显示大量文本(2000-4000 个字符)。无论如何,我认为有 2048 像素的限制,所以我的文字被裁剪了,这没问题,我使用这个:http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx .

问题是文本越长,消耗的内存就越多。如果没有来自上面链接的非常长的文本破解,文本 block 会消耗大约 10mb 的内存!如果我使用上面链接中的 ScrollableTextBlock,内存量会更大,可以达到 30-40 mb。没有限制。所以看起来内存使用量与绘制的区域有关......

有没有办法减少长文本的内存使用? BitmapCach 与这个问题有什么关系吗?我可以禁用它吗?您可以通过添加一个带有很长文本的文本 block 轻松地重现此问题,您可以使用此代码检查内存使用情况,您将看到只有 1 个带有长文本的文本 block ,峰值内存增加了 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,而不仅仅是可见部分。

我四处阅读,有 2 个通用解决方案:

  • 使用 UI 虚拟化技术 - 例如虚拟化堆栈面板
  • 使用数据虚拟化技术 - 例如制作你自己的分页

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

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

关于windows-phone-7 - wp7 - 带有大量文本的 TextBlock - 大量内存使用 - 如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com