方法调用比访问类的私有字段慢吗?

时间:2012-12-17 15:02:04

标签: c# performance

今天正在处理一些我没写过的代码,并注意到在课堂上有一个私人成员m_privateMember。编码器还包括一个名为GetPrivateMember()的方法,该方法仅包含return m_privateMember。值得一提的是,这种方法在类本身中大量使用,而不是简单地使用在此范围内可访问的私有字段。

从语义上讲,我发现很多问题都存在。方法与实际的getter / setter似乎很草率,我一直认为如果你在类范围内,实际使用私有字段而不是getter是更好的形式。毋庸置疑,我打算清理代码纯粹因为它不符合我们工作场所的编码标准,但我很想知道这样做是否也会以任何方式提高性能?

调用简单返回私有字段的方法会调用更多开销吗?

2 个答案:

答案 0 :(得分:2)

直接回答您的问题:取决于您。

对于该程序集内的任何调用,编译器(当启用了优化时)很可能内联一个return private field的属性。在这种情况下,直接访问字段是相同的操作。

对于从程序集外部访问属性的调用,JIT编译器可能以与静态编译器相同的方式内联调用,但是不允许静态编译器这样做,因为它必须尊重提供的接口通过大会。这样您就可以用没有公开更改的新版本替换已编译的程序集,并且不需要重新编译应用程序源以使用新版本。

随着属性变得越来越复杂,静态编译器或JIT编译器内联的可能性越来越小,并且调用属性的方式更像你想象的那样。


所有这些都说,对表演的讨论实际上是学术性的。在几乎所有实际例子中,调用属性与读取私有字段之间的区别是微不足道的。唯一可测量的是,如果您运行的是一些非常低规格的嵌入式系统,或者每秒为系统的每个用户执行数十亿次读取。

大多数计算机都是如此之快,以至于您应该选择使您的代码更易于维护的技术,而不是使您的执行时间额外减少0.0000001秒的技术。

答案 1 :(得分:1)

  

调用简单地返回私有属性的方法会调用   更多的开销?

没有真正明显的区别,但美学和正确使用在这里,其他条件相同,因为每个属性为get和set的每个属性生成一个getter和setter方法 - 所以所有调用都从属性返回一个东西的值实际上是一个方法调用,虽然可能会有一些实现因素/优化正在使得即使在速度方面使用属性“更好”,但在大多数情况下对可比效果的改进可以忽略不计。