【问题标题】:Flipview Items kept in memory保存在内存中的 Flipview 项目
【发布时间】:2013-09-15 00:30:58
【问题描述】:

我注意到 FlipView 控件一次会将其 3 个项目保留在内存中。它在内存中保存当前选择的项目,以及直接位于所选项目左侧和右侧的项目(如果方向为垂直,则在上方/下方)。

当跳转到不同的翻转视图项目时,这会产生一些不必要的副作用。它们在 Surface RT 设备上尤其明显(因为它太慢了)。

有什么方法可以将所有的翻转视图项保存在内存中,以便在您滑动时不会加载和卸载它们?

或者也许是一种在加载翻转视图项目时缓存它们的方法?

感谢您的帮助。

【问题讨论】:

    标签: c# xaml windows-8 windows-runtime


    【解决方案1】:

    为了防止虚拟化,您可以将 ItemPanelTemplate 中的 VirtualizeStackPanel 替换为 StackPanel:

    <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
            <StackPanel AreScrollSnapPointsRegular="True" Orientation="Horizontal" />
    </ItemsPanelTemplate>
    

    但是你必须小心权衡,因为它会在第一次导航时加载所有项目并将它们保存在内存中,直到你离开。
    也许更好的方法是更多地查看加载时间最长的内容并尝试对其进行优化(例如加载图像或在加载时进行一些数据处理)。

    【讨论】:

    • 天哪!在我尝试过和谷歌搜索的所有事情中,我不敢相信我没有尝试过这个。它完美地工作。我完全理解你所说的权衡取舍,我确实考虑到了这一点。就我而言,我知道我将拥有不超过 5 个非常轻量的 FlipView 项目(没有多少 UIElement 被绘制或关联的长时间运行的任务)。
    • 实际上,将这种方法与将 ItemsSource 绑定到实现 ISupportIncrementalLoading 的底层集合相结合,当您不介意内存占用但只是不介意时,这将是一个很好的解决方案不希望一次加载所有 UIElements 相关的时间成本。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2019-04-18
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多