c#深度访问对象性能

本文关键字:对象性 性能 对象 访问 深度 | 更新日期: 2023-09-27 17:49:41

我只是想知道在性能和最佳实践方面推荐以下哪种方法。性能有什么不同吗?

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;
   ......
   ......
}

c#深度访问对象性能

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

性能不考虑,因为属性访问将会很快(即使它不是,如果您以相同的顺序访问相同的属性,它几乎没有什么区别)。

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

阅读得墨忒耳定律:

德墨忒耳定律(LoD)或最小知识原理是开发软件,特别是面向对象程序的设计指南。在其一般形式中,LoD是松耦合的一种特殊情况。

第二个更容易使用…所以,更好的是因为你不用一遍又一遍地重复你的代码。

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

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

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