【问题标题】:WinRT 8.1 C# - ListView performanceWinRT 8.1 C# - ListView 性能
【发布时间】:2014-07-03 13:52:25
【问题描述】:

我的 win8.1 c# 应用程序遇到问题。

问题在于 ListView 和数千个项目的性能,所以,我已经实现了 IncrementalUpdate,它提高了性能,但每次加载页面时都会变得更糟。我将描述我的应用场景,欢迎任何可能的解决方案。

我在应用缓存中有一个包含大约 10000 个对象的列表(应用缓存是我创建的一个静态类,用于存储这些数据,而不是一直从数据库中检索它)

页面的列表视图非常简单,并且有一个与之关联的数据模板,我没有使用 DataTemplateSelector 或其他东西。

列表的绑定在页面的构造函数上,所以我引用的每个 NavigateTo 都会显示数据的页面将重新绑定列表。

我反复导航到页面并返回(NavigatoTo / GoBack)并且列表运行良好且性能良好,因此,在做同样的事情一段时间后,列表的性能开始显着下降并且列表中的元素开始变慢。

我已经尝试分析内存使用情况和用于绑定列表的项目数,它始终相同,没有增加或减少,因为对象与它在 App Load 上的内存中相同.

我只是想多了解一下这个性能问题,因为在我的概念中,当您在页面上执行 GoBack 时,所使用的所有资源都将被 GC 所用,在内存使用跟踪中我可以看到调用GC,但是如果 GC 正在释放资源,并且它一直在使用 NavigateTo 创建的页面,为什么我的应用会发生这种情况?

这是 ListView 的定义:

<ListView Grid.Row="1"
     Grid.ColumnSpan="2"
     x:Name="listViewProduto"
     IsSwipeEnabled="False"
     ShowsScrollingPlaceholders="False"
     ItemContainerStyle="{StaticResource BlinkListViewItemStyle}"
     Tapped="ListViewProduto_Tapped" Loaded="listViewProduto_Loaded">
</ListView>

这里是绑定方法:

listViewProduto.ItemsSource = produtos;
listViewProduto.ItemTemplate = Application.Current.Resources["dataTemplateProduto"] as DataTemplate;
listViewProduto.SelectedIndex = -1;

【问题讨论】:

    标签: c# performance listview memory windows-runtime


    【解决方案1】:

    我认为你应该阅读这篇文章: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh780657.aspx

    你的列表有固定的大小吗?

    【讨论】:

    • 嗨菲利普,谢谢你的帮助。我已经检查了这篇文章,它给出了一些提示,但我尝试实现列表虚拟化,将堆栈面板更改为 ItemsStackPanel 或 VitualizingStackPanel,但是在数据模板上更改它后,应用程序崩溃并且我无法得到错误,因为它超出了我的代码。我会尽量注意listview的大小,我已经把一些关于这个问题的文章涂红了。 Tks
    • 嗨菲利普,今天我一直在对我的代码进行一些更改,它发现 VirtualingStackPanel 现在可以工作了,这些更改包括列表框的固定高度和删除分组数据以启用虚拟化。它现在就像一个魅力,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多