2

哪个更好地访问属性值?

像这样访问

propertyobjA.objB.Prop1
propertyobjA.objB.Prop2

或分配给 var

var objB = propertyobjA.objB;
then call objB.Prop1 and objB.Prop1

哪一个提高了 c# 的性能?

4

5 回答 5

4

老实说,答案很可能是第二个会更快,但我几乎可以保证它一点也不重要。您应该小心不要过早地考虑优化。99% 的性能问题都归结为更大的问题,例如过于频繁地访问数据库等,而不是像这样的微不足道的问题。即使这两种情况之间存在微小差异,除非这是地球上一些对时间最关键的软件,否则重要的是可读性(在这种情况下不是很难阅读),而不是哪个更快。

于 2012-08-16T14:43:06.827 回答
1

这取决于 objB 是什么。如果你正在计算一些东西(你不应该做但可以做),那么当然将它分配给一个值会产生更好的性能。

另一个注意事项,您应该避免依赖于变量的子属性,因为您在类之间放置了更高的耦合。

于 2012-08-16T14:43:21.337 回答
1

我认为这不会对性能产生很大影响(第二种选择可能会更快一些)。但这不是您的性能问题(如果有的话)的来源。

更新propertyobjA.objB:考虑一下,获取Prop1和之间的值可能会发生变化Prop2,因此这两种选择不能被视为相同的代码。

于 2012-08-16T14:43:51.213 回答
0

对性能的影响很大程度上取决于属性 getter的实现。propertyObjA.objB例如,如果它简单地实现为:

public Foo objB { get { return this._objB; } }

然后调用两次对性能的影响可以忽略不计。

但是,如果相同的属性在计算上做了一些昂贵的事情,那么你的第二个建议会表现得更好。

话虽如此,框架指南声明您不应该使用属性获取器来隐藏可能计算昂贵的操作,而是更喜欢方法调用,例如:

public objB ComputeB ();
于 2012-08-16T14:44:05.870 回答
0

在用 c# 等高级语言编写代码时,你真的不应该关心这样的事情。

诸如 c# 和 java 等语言的现代编译器非常复杂,将对您的代码执行各种优化。作为开发人员的最终结果是,在以一种或另一种方式编写特定的琐碎代码时,您永远不会看到性能差异。编译器将选择最优化的方式。

其他一切都取决于偏好。如果您想链接多个属性访问,那很好。如果您想将中间结果分配给变量以提高代码的可读性,那也可以。

于 2012-08-16T14:47:09.840 回答