C#深入访问对象性能

时间:2012-12-28 12:07:46

标签: c# performance oop

我只想知道在性能和最佳实践方面推荐以下哪种方法。有没有性能差异?

if (objA.objB.objC.objD.objE != null)
{
   objX.var1 = objA.objB.objC.objD.objE.prop1;
   objX.var2 = objA.objB.objC.objD.objE.prop2;
   objX.var3 = objA.objB.objC.objD.objE.prop3 + objA.objB.objC.objD.objE.prop4;

   ......
   ......
}

or

var objonlyE = objA.objB.objC.objD.objE
if (objonlyE != null)
{
   objX.var1 = objonlyE.prop1;
   objX.var2 =  objonlyE.prop2;
   objX.var3 = objonlyE.prop3 + objonlyE.prop4;
   ......
   ......
}

5 个答案:

答案 0 :(得分:6)

第二个更好,因为你永远不知道隐藏在'。'背后的是什么。它可能是数据库调用或其他一些昂贵的操作。

答案 1 :(得分:3)

性能不会进入它,因为属性访问速度很快(即使不是,如果以相同的顺序访问相同的属性也没什么区别。)

可维护性和可读性是问题,在这方面,你的第二个选择要好得多。

了解Law of Demeter

  

Demeter法则(LoD)或最小知识原则是开发软件,特别是面向对象程序的设计指南。在一般形式中,LoD是松散耦合的特定情况。

答案 2 :(得分:0)

第二种更容易使用...所以,更好,因为你不会一次又一次地重复你的代码......

答案 3 :(得分:0)

我更喜欢第二种方法,它更具可读性。在性能方面,它应该是不明显的,即在常规变量/属性的情况下。如果在属性下隐藏了一些性能繁重的操作,那么您也应该使用第二个版本,因为它会更快。

答案 4 :(得分:0)

在第二种方法中,你可以减少程序员错误的位置,例如在第一种方法中,你可能会犯下以下错误:

objX.var1 = objA.objB.objC.objD.objE.prop1;
objX.var2 = objA.objB.**objU**.objD.objE.prop2;