【问题标题】:Is there a performance hit to binding a relative source vs a direct object?绑定相对源与直接对象是否会影响性能?
【发布时间】:2010-04-15 20:58:01
【问题描述】:

我目前正在开发我的第一个 WPF 应用程序,我很好奇是否会通过执行以下操作来降低性能:

Dim binding As New Binding("PropertyOnObject.Property1.Property2.Value")
binding.Source = Object

vs 做

Dim binding As New Binding("Value")
binding.Source = Object.PropertyOnObject.Property1.Property2

我的对象是相当动态的,因为 PropertyOnObject 可以改变(从而改变 Property1 和 Property2),所以第一种方法是有意义的。不过,这样做是否会造成性能损失?

【问题讨论】:

    标签: .net wpf data-binding binding


    【解决方案1】:

    第二个绑定可能会稍微好一些,因为 WPF 不需要遍历冗长的属性路径,但它具有不同的语义。在第一次绑定中,如果 PropertyOnObject、Property1、Property2 或 Value 中的任何一个发生更改,则将重新评估绑定。在第二个绑定中,将在设置 Source 时解析属性链,并且绑定源将是当时的 Property2 是什么。因此,如果(例如) Property1 更改为引用不同的实体,则不会更新绑定,因为绑定独立于引用链附加到 Property2 对象。仅当您更改原始 Property2 对象上的值时,才会进行绑定更新。

    由于您想要第一个行为,您需要编写第一个绑定,并支付轻微的性能损失。以第二种方式编写它可能会更快,但会给出错误的结果。

    请注意,除非您拥有大量此类绑定,否则性能损失将是微不足道的:您在此处以 UI 时间尺度进行操作,因此此处或此处的几毫秒无关紧要。不要尝试优化绑定,除非您能确定它确实导致了问题。

    【讨论】:

    • +1 提到性能损失可能是微不足道的。鉴于现代处理器以 nano 秒的规模工作,它们可以在短短一毫秒内完成惊人的工作量。由于我们讨论的是人类时间尺度上的交互,因此任何低于 50 毫秒左右的时间都不会被察觉。
    • +1 用于提及两个选项在更新行为方面的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多