【问题标题】:WPF listview / gridview performance horrible, suggestionsWPF listview / gridview 性能糟糕,建议
【发布时间】:2010-10-08 22:14:50
【问题描述】:

我有一个使用 WPF ListView/GridView 绑定到 ObservableCollection 的窗口。表演是完全可怕的。每次添加/删除/修改项目时,应用程序在尝试加载 300-400 个项目时会阻塞,并且 CPU 使用率会达到峰值。剖析没有发现任何明显的东西。

大家有什么建议吗?

【问题讨论】:

  • 正在使用的 DataTemplate 包含一个 TextBlock。

标签: wpf performance gridview listview


【解决方案1】:

我也有类似的问题。将MaxHeight 设置为大于ListView 实际高度的值立即为我解决了问题,感谢here 的回答,但我仍然无法理解它是如何工作的。

【讨论】:

    【解决方案2】:

    您需要虚拟化 ListView 的 ItemSource,如本文所述:WPF: Data Virtualization on CodeProject by Paul McClean

    【讨论】:

      【解决方案3】:

      很明显,请确保您已升级到 .net 3.5 SP1,那里有很多性能提升。

      此外,可能值得研究 WPF datagridview 控件,因为 .net 3.5 SP1 中的许多性能工作都是如此,因此 datagridview 在大型数据集上具有良好的性能。

      http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047

      【讨论】:

        【解决方案4】:

        检查这些属性:

        VirtualizingStackPanel.IsVirtualizing="True"
        VirtualizingStackPanel.VirtualizationMode="Recycling"
        ScrollViewer.IsDeferredScrollingEnabled="True"
        

        【讨论】:

          【解决方案5】:

          您是否按照此问题的建议尝试过虚拟化??

          WPF ListView Very Slow Performance - Why? (ElementHost, or Other Reason?)

          【讨论】:

          • 这只有在您明确设置 ItemsPanel 属性以使用默认值以外的其他东西时才有帮助,默认值已经是 VirtualizingStackPanel。
          【解决方案6】:

          首先猜测,您是否为每个 ListViewItem 使用复杂的数据模板?这可能是任何东西,从大量图像到(旧)BitmapEffects,甚至是从数据库中按需获取数据的延迟加载属性(这可能会导致您执行许多数据库调用来呈现每个视觉对象,具体取决于您的数据模型的方式)有效)。

          第二个猜测,列表本身是否能够快速运行其加载/添加/修改/删除例程(意味着在呈现数据时会出现问题),或者列表本身是否能够缓慢地完成这些工作(表明列表有一些一种问题)。

          【讨论】:

          • 正在使用的 DataTemplate 包含一个 TextBlock。
          • 您能否分享更多重现您问题的代码?也许是一个简单的新解决方案,运行最低限度会导致它?
          猜你喜欢
          • 2021-07-25
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-26
          • 2013-02-04
          • 1970-01-01
          相关资源
          最近更新 更多