WPF:由StackPanel引起的高内存占用与卡顿
WPF有一个概念叫UI虚拟化,就是只会渲染窗口内可视的UI。
简单说:只创建你看得见的控件,看不见的就不创建,等你滚动到它时再动态生成。
一般的内容控件,如ListBox、ListView、DataGrid等,都是支持UI虚拟化的。
但是如果使用StackPanel布局面板,作为数据容器那么就会造成“UI虚拟化的失效”。
<StackPanel>
<TextBlock>hello</TextBlock>
<DataGrid ItemsSource="{Binding BigData}" />
</StackPanel>
这种情况下,StackPanel会跟它里面的内容控件“说”:“你们都有无限的空间啦,随便用”。因此DataGrid收到这个信息后,即使窗口内看不见,它也会把所有的数据及其UI都渲染出来,造成高内容占用与卡顿。
StackPanel不在意窗口是否还有足够的空间放下内容,它会无限堆叠,直至内容渲染完毕,并且不会对内容自动换行,不会自动提供滑动功能。

相关的还有ScrollViewer
Canvas

浙公网安备 33010602011771号