簡體   English   中英

C#深入訪問對象性能

[英]C# deep accessing objects performance

我只是想知道在性能和最佳實踐方面推薦以下哪種方法。 有任何性能差異嗎?

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

第二個更好,因為你永遠不知道隱藏在'。'背后的是什么。 它可能是數據庫調用或其他一些昂貴的操作。

性能不會進入它,因為屬性訪問速度會很快(即使不是這樣,如果以相同的順序訪問相同的屬性,它也沒什么區別)。

可維護性和可讀性是問題,在這方面,您的第二個選擇要好得多。

閱讀得墨忒耳定律

Demeter法則(LoD)或最小知識原則是開發軟件,特別是面向對象程序的設計指南。 在一般形式中,LoD是松耦合的特定情況。

第二個更容易使用...所以,更好,因為你不會一次又一次地重復你的代碼......

我更喜歡第二種方法,它更具可讀性。 在性能方面,它應該是不明顯的,即在常規變量/屬性的情況下。 如果在屬性下隱藏了一些性能繁重的操作,那么您還應該使用第二個版本,因為它會更快。

在第二種方法中,您可以減少程序員錯誤的位置,例如在第一種方法中,您可能會犯下以下錯誤:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM