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