2010-10-13 27 views
0

Y a-t-il une différence de vitesse d'exécution entre les deux lignes de code suivantes? Je ne peux pas dire en regardant l'IL:La vitesse de .Net/C# se dégrade-t-elle avec une profondeur de champ accrue?

int x = MainObject.Field1; 
int x = MainObject.Public.Fields.Field1; 

Je sais de Delphi (code natif), il n'y a pas de différence.

+0

Comment ne pouvez-vous pas dire par l'IL? Les deux génèrent une instruction IL ** unique **, pratiquement identique. –

+3

Si ce sont des propriétés non triviales, il peut y avoir un code de complexité arbitraire à l'intérieur d'eux, donc ce n'est pas possible de le dire. Si ce sont tous des champs de type référence, (simplifiant un peu les choses), chaque référence "imbriquée" (non nulle) doit être déréférencée: l'objet auquel elle fait référence sera sur une partie différente du tas. Cela aura un coût de performance mineur; en particulier, il ne sera pas compatible avec le cache. Pas quelque chose susceptible de faire une différence significative dans la plupart des applications du monde réel. – Ani

+2

@Ani - votre commentaire est un * lot * plus précis que la réponse marquée. Vous devriez le poster. –

Répondre

1

Accepter par '.' pour approfondir les éléments de structure de classe - NON, mais invocation de méthode avec elle - OUI.

+1

Cette question n'a aucun sens dans le contexte des invocations de méthode. –

+0

Invocations: int x = MainObject.Field1.ToString(). Trim(). Length; – UGEEN

0

Il n'y a aucune différence. (en supposant que vous voulez dire, comme vous le dites dans le titre, les champs)