2012-12-28 9 views
5

Chcę tylko wiedzieć, które z następujących zaleceń jest zalecane pod względem wydajności i najlepszych praktyk. Czy jest jakaś różnica w wydajności?C# wysoki dostęp do wydajności obiektów

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

tam może z różnicy wydajności, ale jest to niezauważalne. – mdcuesta

+0

Jest to zły projekt, który jest przykro mi powiedzieć :( – paritosh

+0

Czy wiesz, że kompilator znajdzie bezpośrednią ścieżkę dostępu do właściwości? –

Odpowiedz

0

Drugi jest po prostu łatwiejsze w użyciu ... Więc lepiej, bo nie powtórzyć swój kod znowu i znowu i znowu ...

0

wolę drugie podejście, jest o wiele bardziej czytelny. Pod względem wydajności powinno być niezauważalne, czyli w przypadku zwykłych zmiennych/właściwości. Jeśli w ramach właściwości są ukryte pewne działania o dużej wydajności, powinieneś także użyć drugiej wersji, ponieważ będzie ona szybsza.

3

Wydajność nie jest dostępna, ponieważ dostęp do nieruchomości będzie szybki (a nawet jeśli nie jest, nie ma znaczenia, czy dostęp do tych samych właściwości w tej samej kolejności).

Łatwość utrzymania i czytelność to kwestie, w związku z czym druga opcja jest znacznie lepsza.

Przeczytaj o Law of Demeter:

Prawo Demeter (LOD) lub Zasada najmniejszego Wiedza to wytyczne projektowe do tworzenia oprogramowania, zwłaszcza obiektowego programy. W swojej ogólnej formie LoD jest szczególnym przypadkiem luźnego sprzężenia.

+0

Tak, ale ... Dlaczego nie odpowiedzieć na pytanie: w C#/.NET, wspólne podwyrażenia nie są eliminowane przez kompilator, więc eliminowanie ich ręcznie to przyspieszenie, niezależnie od tego, czy przyspieszenie jest wykrywalne, jest inne pytanie: –

+0

@romkyns - Dokładnie. edup (?) nie jest tutaj problemem. Zwracam uwagę na duże problemy, które istnieją z pierwszym podejściem. I nigdy nie wiadomo, czy przyszła wersja kompilatora nie będzie w stanie wyeliminować podwyrażeń ... – Oded

+0

@ Wątpię, czy zrobi to nowa wersja, szczególnie jeśli są to właściwości, a nie pola. (Osobiście nie chciałbym, żeby tak się stało). –

6

Drugi jest lepszy, ponieważ nigdy nie wiadomo, co kryje się za ".". Może to być wywołanie bazy danych lub inna kosztowna operacja.

0

W drugim podejściu Państwo mają mniej miejsca na błędy programistów na przykład w jednej pięści można wykonać następujące czynności błąd:

objX.var1 = objA.objB.objC.objD.objE.prop1; 
objX.var2 = objA.objB.**objU**.objD.objE.prop2; 
Powiązane problemy