哪个更好地访问属性值?
像这样访问
propertyobjA.objB.Prop1
propertyobjA.objB.Prop2
或分配给 var
var objB = propertyobjA.objB;
then call objB.Prop1 and objB.Prop1
哪一个提高了 c# 的性能?
哪个更好地访问属性值?
像这样访问
propertyobjA.objB.Prop1
propertyobjA.objB.Prop2
或分配给 var
var objB = propertyobjA.objB;
then call objB.Prop1 and objB.Prop1
哪一个提高了 c# 的性能?
老实说,答案很可能是第二个会更快,但我几乎可以保证它一点也不重要。您应该小心不要过早地考虑优化。99% 的性能问题都归结为更大的问题,例如过于频繁地访问数据库等,而不是像这样的微不足道的问题。即使这两种情况之间存在微小差异,除非这是地球上一些对时间最关键的软件,否则重要的是可读性(在这种情况下不是很难阅读),而不是哪个更快。
这取决于 objB 是什么。如果你正在计算一些东西(你不应该做但可以做),那么当然将它分配给一个值会产生更好的性能。
另一个注意事项,您应该避免依赖于变量的子属性,因为您在类之间放置了更高的耦合。
我认为这不会对性能产生很大影响(第二种选择可能会更快一些)。但这不是您的性能问题(如果有的话)的来源。
更新propertyobjA.objB
:考虑一下,获取Prop1
和之间的值可能会发生变化Prop2
,因此这两种选择不能被视为相同的代码。
对性能的影响很大程度上取决于属性 getter的实现。propertyObjA.objB
例如,如果它简单地实现为:
public Foo objB { get { return this._objB; } }
然后调用两次对性能的影响可以忽略不计。
但是,如果相同的属性在计算上做了一些昂贵的事情,那么你的第二个建议会表现得更好。
话虽如此,框架指南声明您不应该使用属性获取器来隐藏可能计算昂贵的操作,而是更喜欢方法调用,例如:
public objB ComputeB ();
在用 c# 等高级语言编写代码时,你真的不应该关心这样的事情。
诸如 c# 和 java 等语言的现代编译器非常复杂,将对您的代码执行各种优化。作为开发人员的最终结果是,在以一种或另一种方式编写特定的琐碎代码时,您永远不会看到性能差异。编译器将选择最优化的方式。
其他一切都取决于偏好。如果您想链接多个属性访问,那很好。如果您想将中间结果分配给变量以提高代码的可读性,那也可以。