gpt4 book ai didi

c# - 取消订阅事件 - 性能受到影响?

转载 作者:IT王子 更新时间:2023-10-29 04:42:18 27 4
gpt4 key购买 nike

考虑以下代码(来自性能报告):

Performance report

这是属性通知监听器组件的一部分。 OnItemPropertyChanged 方法是一个带有 PropertyChangedEventHandler 签名的私有(private)实例绑定(bind)方法。此方法被调用了大约 100.000 次,并导致应用程序出现严重延迟。

是否有与(取消)订阅事件相关的性能考虑因素?是否有解释为什么这会导致这样的性能下降?

最佳答案

首先要注意的是:

notificationItem.PropertyChanged -= OnItemPropertyChanged;

实际上为此目的分配一个新的代表。这也意味着等价测试不能在 identity 等价时短路 - 它必须执行方法/目标等价(即不同的委托(delegate)实例,但相同的目标/方法,因此被认为是等价的委托(delegate)组合的目的)。

首先会尝试的是使用单个委托(delegate)实例,即

void OnItemPropertyChanged(object sender, PropertyChangedEventArgs args) {...}

private readonly PropertyChangedEventHandler sharedHandler;
public YourType() { // constructor
sharedHandler = OnItemPropertyChanged;
}

然后当您订阅时,而不是:

notificationItem.PropertyChanged += OnItemPropertyChanged;

notificationItem.PropertyChanged -= OnItemPropertyChanged;

改用:

notificationItem.PropertyChanged += sharedHandler;

notificationItem.PropertyChanged -= sharedHandler;

至少值得一试。

关于c# - 取消订阅事件 - 性能受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24238897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com