【问题标题】:Performance Impact of Triggers and MultiTriggers触发器和多触发器的性能影响
【发布时间】:2013-07-08 15:41:02
【问题描述】:

在工作中,出现了一个关于在 ListBoxItem ControlTemplate 中使用 MultiTrigger 对性能的影响的问题。

情况有点像这样:我们有一个 ListBox 控件的自定义样式,它定义了选定 ListBoxItem 的动画和颜色。出现问题是因为当 ListBox 被禁用时,我们不希望选定的 ListBoxItem 显示选定的“背景”突出显示。这导致我们在 ListBoxItems 的 ControlTemplate 中添加一组触发器,以在禁用和选择 ListBoxItem 时禁用此自定义突出显示。这就是对负面性能影响的担忧的根源:

如果每个 ListBoxItem 都需要检查触发器并激活触发器,如果​​有很多项目,这会产生明显的性能影响。这可能是个问题,因为此代码在计算机上运行。

【问题讨论】:

  • 您是否在使用以下任何一种:MVVM、MVC、MVP?
  • 不应该——触发器通常是简单的比较,除非你有一个非常昂贵的转换器。另外,应该在列表框上启用虚拟化,使触发器仅对可见项目有效。分析您的代码,如果您在使用 WPF 时遇到性能问题,则触发器可能不是原因。
  • @oleksii 此应用程序使用 MVVM。
  • @JulienLebosquain 在默认情况下始终启用虚拟化。
  • @AlexanderVentura 请看 HighCore 的回答。

标签: c# .net wpf performance


【解决方案1】:

一号 WPF 不支持“旧电脑”。

如果您的 ListBox 是虚拟化的(这是默认行为,除非您通过不使用 VirtualizingStackPanel 或通过将 ListBox 放入无限容器(例如另一个 StackPanel)来破坏它) 987654325@ 在用户滚动到视图之前不会创建,在这种情况下,无论 ListBox 中有 1000000000 个项目,只有适合屏幕的项目才会实际创建并消耗内存 + CPU。

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2011-10-23
    • 2011-10-23
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多