我开始学习Windows Phone 8的LINQ-to-SQL
,并在MSDN上碰到this文章。
它们显示了DataContext
的基类,该基类实现了INotifyPropertyChanging
和INotifyPropertyChanged
。 INotifyPropertyChanging
的原因是:
本文没有提供任何特定的引用来证明对INotifyPropertyChanging
接口(interface)的内存消耗的主张。关于INotifyPropertyChanging本身的文章只是说:
有人可以告诉我这个接口(interface)如何限制应用程序的内存占用,仅通过通知属性值将要更改(甚至不限制更改不会发生)如何向我解释?
最佳答案
我只能推断,但是我认为这就是作者的想法:
在没有INotifyPropertyChanging
的世界中,如果使用者需要某个属性的旧值,则它必须抢先缓存它(因为一旦PropertyChanged
事件引发,那就太迟了,并且该值已经更改)。另外,生产者可以在不同的属性中保留旧值的副本。无论哪种方式,数据始终保持重复。
使用INotifyPropertyChanging
,使用者不需要预先缓存任何内容。引发PropertyChanging
事件时,知道它即将更改,它可以获取旧值。然后引发NotifyPropertyChanged
事件,使用者可以获取新值,对两者进行任何处理,然后将其删除。数据仍然是重复的,但是仅在特定时间点和有限的持续时间内。