[英]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.