Xaml 当多个GirdView(启用一行)嵌套在ListView、ListView和#x27;他的表现很差
我正在设计一个类似NetFlix主页的页面。它有许多(20+)Xaml 当多个GirdView(启用一行)嵌套在ListView、ListView和#x27;他的表现很差,xaml,listview,uwp,winrt-xaml,uwp-xaml,Xaml,Listview,Uwp,Winrt Xaml,Uwp Xaml,我正在设计一个类似NetFlix主页的页面。它有许多(20+)GirdViews(启用一行)嵌套在外部的ListView中。所有项目都是不确定的,因此它们必须在运行时生成。 所以我设计如下: Xaml: 所以 场景1: 在启用了ListView的UI虚拟化的情况下运行应用程序,绑定过程非常快,内存约为300MB。然后使用鼠标快速向上/向下滚动ListView,ListView上下滚动非常慢,在屏幕空白后显示数据非常慢。 场景2: 在禁用ListView的UI虚拟化的情况下运行应用程序,这一次绑
GirdView
s(启用一行)嵌套在外部的ListView
中。所有项目都是不确定的,因此它们必须在运行时生成。
所以我设计如下:
Xaml:
所以
场景1:
在启用了ListView
的UI虚拟化的情况下运行应用程序,绑定过程非常快,内存约为300MB。然后使用鼠标快速向上/向下滚动ListView,ListView
上下滚动非常慢,在屏幕空白后显示数据非常慢。
场景2:
在禁用ListView
的UI虚拟化的情况下运行应用程序,这一次绑定过程需要很长时间,内存可能会增加到1GB。但是快速地向上/向下滚动ListView就可以了
我的需要:
- 向上/向下滚动ListView执行速度很快
- 绑定进程快,内存低
ItemsPanelTemplate
asStackPanel
<ListView>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
绑定进程快,内存低
您可以使用数据虚拟化将json数据切割成片,然后使用ListView加载更多数据
我希望实时可视化树显示所有ListViewItems,因为我将使用所有ListViewItems来做一些额外的事情
为了解释这种行为,我们可以参考,UI虚拟化是您可以做出的最重要的改进
这意味着表示项目的UI元素是按需创建的。对于绑定到1000项集合的项控件,同时为所有项创建UI将是一种资源浪费,因为它们不能同时显示。ListView和GridView(以及其他标准ItemsControl派生控件)为您执行UI虚拟化。当项目接近滚动到视图中(几页之外)时,框架生成项目的UI并缓存它们。当项目不太可能再次显示时,框架会重新声明内存
您可以使用changeItemsPanelTemplate
asStackPanel
<ListView>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
绑定进程快,内存低
您可以使用数据虚拟化将json数据切割成片,然后使用ListView加载更多数据 ScrollViewer可以禁用ListView的数据可视化。ios和android上相同的设计模式表现出卓越、快速和低内存,向上/向下滚动ok。ScrollViewer可以禁用ListView的数据可视化。ios和android上相同的设计模式表现出卓越、快速和低内存,向上/向下滚动确定。也许您上面描述的是一种解决方法,但ListView中的ListView/GridView等情况仍然很常见,uwp中的性能与android/ios.emm相比并不令人满意,如果您能在用户语音中发布此内容,我们将不胜感激!您好,已经创建了一个用户语音,最后请参见,我剪切了json文件,并在滚动到页脚时加载它们。Thx.也许您上面描述的是一种解决方法,但是ListView中的ListView/GridView等情况仍然很常见,uwp中的性能与android/ios.emm相比并不令人满意,如果您能在用户语音中发布此信息,我们将不胜感激!您好,已经创建了一个用户语音,最后请参见,我剪切了json文件,并在滚动到页脚时加载它们。谢谢。
list.ItemsSource = await GetData();
<ListView>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>