我有一个有公共财产的班级.在单个函数中,我称这个属性大约30-40次.
this.MyProp;
Run Code Online (Sandbox Code Playgroud)
在函数中定义局部变量会更好吗?
string myProp = this.MyProp;
Run Code Online (Sandbox Code Playgroud)
这样做之后 - 在函数中我缩短了查找链...所以我只需要引用myProp,而不是this.MyProp.
在JavaScript中,这种缩短的查找确实提高了性能.在C#中会更好/更差吗?因为很明显,我还需要创建另一个本地字符串变量.
Rex*_*x M 11
从纯粹的绩效角度来看,它取决于财产的作用.如果MyPropgetter只返回一个私有字段,那么开销就完全无关紧要了.实际上,除非你显然做了一些重要的事情,比如一些巨大的枚举或调用数据库,否则不用担心.担心这是微观微观优化.
重要的是要注意属性的目的,即通过封装的例程强制访问值以确保一致性.如果你试图绕过它,你就会暴露你的代码以增加bug的风险.
来自@DavidAndres评论:
根据惯例,属性通常不应该在吸气剂或定位器中做任何实质性的事情.所以我想说,如果您只是通过反射器或文档或查看自己的代码来验证属性表现良好,那就无所谓了.在确认必要之后,处理值明显需要定位的情况应该是边缘情况.
编辑:要明确,我建议您不要出于任何性能原因而避免使用本地值.作为@Guffa注意到的影响是微不足道的两种方式.我指出属性通常是属性的原因,默认情况下对值的访问应该通过属性.