【问题标题】:WPF: Is there a performance and/or memory benefit to setting properties versus using Styles?WPF:设置属性与使用样式相比是否有性能和/或内存优势?
【发布时间】:2013-08-06 18:38:45
【问题描述】:

我自己没有时间对此进行全面测试,我希望其他人可能已经知道使用控件的属性与样式定义控件的外观是否有任何性能和/或内存优势(反之亦然)。

选项#1:

<Border Background="White" BorderBrush="Black" BorderThickness="2" CornerRadius="20">
    ...
</Border>

选项#2:

<Style x:Key="BorderStyle" TargetType="Border">
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <Setter Property="BorderThickness" Value="2"/>
    <Setter Property="CornerRadius" Value="20"/>
</Style>

<Border Style="{StaticResource BorderStyle}">
    ...
</Border>

请注意,我不是在询问可重用性,因为我了解这些好处。我特别想知道特定于给定控件且未重用的“一次性”样式。

另一个例子是我有第二个带边距的边框。让 Border 使用与上述相同的样式并直接设置 Margin 属性会更高性能并且需要更少的内存,还是我应该使用新的设置器基于第一个 Style 资源创建第二个 Style 资源?

【问题讨论】:

  • 查看优先级设置值列表(link),我们发现Local valueStyle setters(第8位)排在第一位(第3位)。因此,通过在本地设置值,这些值的设置速度会比其他来源的值快一点。
  • 我认为更好的术语是说它们设置得“更快”而不是“更快”。
  • 优先级列表没有对 when 属性值的实际设置做出任何声明。它只是列出了优先顺序,仅此而已。
  • 请记住,我不能将 cmets 标记为答案...

标签: wpf wpf-controls wpf-4.0


【解决方案1】:

如果您对仅在一个地方使用的一组属性使用 Style 语法,您不会获得内存效率,但您会获得代码可读性;您的主要 XAML 代码将不那么混乱。我从来没有感觉到使用资源字典样式和本地定义的依赖属性之间的执行速度差异。

再次,对于第二个问题,没有明显的速度差异,但是您可以通过指定本地属性来覆盖任何资源字典属性。以这种方式使用样式涉及的内存效率非常小。

【讨论】:

    【解决方案2】:

    我知道上面的优先级列表,但没有我在评论中写的那么多。以下是Matthew MacDonald book [Chapter 4. Dependency Property] 中关于此优先级列表的说明:

    因此,当您在本地设置值时,会为该值分配内存。当您在Style 中设置这些值以及使用Style 的其他控件时,内存仅分配一次,即存储Style 的值。

    我认为,如果控件不是很多(模糊的概念,可以是1、2或3),速度实际上是没有区别的,但是如果设置了控件,在这种情况下,差异在速度和内存存储将是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多