首先,使您的 Fill 绑定具有 Mode=OneWay。我敢打赌你不需要它是 TwoWay 并且它可能是你设置中的默认值。 TwoWay 绑定的成本要高得多。
其次,考虑使用更严格的版本:Mode=OneTime。由于图标不太可能更改,因此您根本不需要任何更改跟踪。这将为您节省更多资源。
就您而言,第一+第二可能不会给您带来巨大的推动,但值得尝试和记住。
第三,你的情况如何VisualBrush
是吗?他们都使用相同的吗Visual="{StaticResource appbar_zune}"
?那么为什么要创建数千个实例呢?不要复制粘贴,只需创建一个实例并使所有项目都使用该实例。您可以节省大量时间和内存。
第四,也是最重要的,通常会带来最大的加速,是 - 你有tons的项目。我打赌你有一些滚动,水平或垂直的。但是如何生成并显示这些项目呢?一次性创建它们是..浪费的。它们不能全部显示在屏幕上,对吗?
您是否有一些 ItemsControl 可以生成那千个项目?调查ItemsPanel
该 ItemsControl 的属性并打开virtualizing
该面板上的选项。这将导致它链接到滚动条,并且它将开始动态地仅创建屏幕上的项目并销毁移出屏幕的项目。好吧,我把它过于简单化了,但可以说它是这样工作的。请注意,容器如ListBox
(以及许多其他)也是一个 ItemsControl,因此它也适用于此处。
或者也许您有巨大的显式 XAML 文件,其中包含数千个控件StackPanel
没有 ItemControl?这其实不太明智。但是哦好吧..你仍然可以打开virtualization
在那个 StackPanel 上。
如果您有超过几十个项目,那么打开虚拟化通常是一个好主意。通常,你有一百个,它是必须的,如果你达到数千个或更多,它也是必须的。然而,虚拟化成本:它经常重置/重新初始化项目。如果你的ItemTemplate真的很复杂,虚拟化可能会导致滚动变得“锯齿/滞后”,我不知道如何用英语表达,抱歉。合成器线程可能根本没有足够的时间来重新计算和重新布局所有快速移动的项目。如果您遇到该问题,请尝试设置Height
的项目到一个不变的真正固定的恒定值。它对于加快布局速度有很大帮助。但如果您的 ItemTemplate 确实非常复杂,那么它也可能无济于事。在这种死胡同的情况下,您唯一的选择是......重新设计并简化项目模板。
EDIT:
当然,如果您没有滚动条并且您试图一次显示大量项目,那么所有这些都不会为您带来任何好处。在这种情况下,努力简化或删除绑定、模板、组件嵌套(有时手动计算位置比使用三个嵌入网格更好),使用渲染缓存或(...).. 抱歉,我开始做出太多猜测,太多选择..
EDIT:
我刚刚注意到Width="1*"
and Stretch
,所以顶部可能有一个 Grid,而不是 StackPanel。由于您希望它们大小相等,因此UniformGrid
可能会有更好的表现。此外,通过一些工作,您也可以将虚拟化添加到网格中:
- 从 4.5 及更高版本开始,变得更容易 -文章:WPF 4.5 新虚拟化功能
- below, it requires more work, see Dan Crevier's 4-part series blog:
- One: http://blogs.msdn.com/dancre/archive/2006/02/06/implementing-a-virtualized-panel-in-wpf-avalon.aspx
- Two: http://blogs.msdn.com/dancre/archive/2006/02/13/531550.aspx
- Three: http://blogs.msdn.com/dancre/archive/2006/02/14/532333.aspx
- Four: http://blogs.msdn.com/dancre/archive/2006/02/16/implementing-a-virtualizingpanel-part-4-the-goods.aspx如果虚拟化网格还不够,请尝试移动到画布并手动强制某些宽度/高度/位置。删除自动布局有时会节省很多。然后,您可以使用虚拟画布如果你真的把固定大小的物品放在那里,你可能会尽快得到它。但这是最后的选择。前面提到的事情应该运作良好。
哦,关于虚拟化的最后一句话:记住,当 ScrollView 在虚拟化模式下工作时,然后Position
不再以像素/点计算。在 v 模式下,滚动条的位置被计入items
,也就是说,position=2.5 表示滚动位于第三个项目的中间(通过了 2 个项目,多了一半),而不是 pos=2.5“像素”。
旁注:“百万点画布”:https://blogs.msdn.microsoft.com/kaelr/2010/08/11/zoomableapplication2-a-million-items/