作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
考虑以下代码(来自性能报告):
这是属性通知监听器组件的一部分。 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/
我有以下 div 结构。 和下面的 CSS .profile_outer { border: 2px solid #660000; -moz-border-radius:
在我的服务器上托管了两个网站(比如 abc.com 和 test.xyz.com) 我正在尝试为 test.xyz.com 重建数据库,并在此过程中 1.我删除了与之相关的数据库。2.停止mysql(
我是一名优秀的程序员,十分优秀!