c# – 为什么属性执行比Field或Method执行慢?
在
CLR via CSharp第10章“属性”Jeff Richter写道:
即使属性被定义为只返回私有字段也是如此?为什么同步方法首选?为什么在MarshalByRefObject方案中首选一个方法? 澄清我的问题:Jeff似乎正在做一个全面的陈述,即属性是不可取的,在这两种情况下,方法是比较可取的.正如Joe White指出的,属性可以有任意代码.但方法可以运行相同的任意代码.这是我有困难的部分.使用方法实际上是有利于使用属性(给定相同的代码用于同步还是编组),还是仅仅使用语言约定的问题? 解决方法
我认为他指出,因为一个属性可以运行任意代码,调用代码不应该假定它会立即完成.
如果所有的属性都返回一个字段,那么它的方法体实际上将被JIT编译器内联,它将和一个字段访问一样快.所以不是这样的东西慢慢的;这是他们是黑盒子.如果你不知道一个财产是如何实现的,那么你不能对它快速返回做出假设. (也就是说,制造一个缓慢的财产将会明显违反.NET Framework Design Guidelines,特别是这一个:“使用一种方法而不是一种财产,[如果]操作比一个字段设置的速度要慢一个数量级. ) 至于他提出使用方法的建议,我不能理解.属性是方法:属性getter是一个方法(通常命名为get_PropertyName),属性setter是一个方法(set_PropertyName),读取属性的代码被编译为使得方法调用get_PropertyName的代码.没有什么特别的,使一个属性比方法更慢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |