2009-04-15 9 views
1

Je trouve un code comme celui-ci dans un projet, je travaille surPerformance/Style A propos de retour d'une méthode/fonction

public SqlDataReader SomeMethod(int someParam) 
{ 
     // ... some code goes here 
     SqlDataReader dataReader = m_command.ExecuteReader(CommandBehavior.CloseConnection); 
     return dataReader; 
} 

Je me demandais ce qui est mieux, l'original ou au-dessous

public SqlDataReader SomeMethod(int someParam) 
{ 
     // ... some code goes here 
     return m_command.ExecuteReader(CommandBehavior.CloseConnection); 
} 

Y a-t-il un avantage à créer la variable et à la renvoyer plutôt que de simplement retourner le lecteur créé? Je penserais non car c'est juste une référence. L'exemple que j'ai donné était ce que j'ai trouvé mais il pourrait être n'importe quel type de variable. Une chose que je peux penser est pendant le débogage, il est probablement agréable de regarder ce qui est dans la variable.

Quelqu'un veut contribuer à 2 cents?

Répondre

2

Le débogage est probablement la meilleure raison. Avec la première méthode, il est plus facile d'effectuer, par exemple, Vérifiez si dataReader est null avant de le retourner.

Il ne devrait pas y avoir de différence de performance, comme vous l'avez dit. Si cette méthode est invoquée souvent, le compilateur JIT (si activé) est très susceptible d'optimiser la variable locale.

+0

Mais au moins pour le CLR, vous n'avez pas la possibilité d'éteindre le JIT. – MichaelGG

+0

Ceci est tagué en langue-agnostique, donc je ne voulais pas faire ma réponse C# -spécifique. Le code pourrait être Java valide, aussi. –

1

Tout compilateur semi-décent optimisera le premier exemple de sorte que dataReader n'a pas besoin d'être stocké dans une variable temporaire. En d'autres termes, les deux exemples devraient avoir exactement les mêmes efficiences.

Personnellement, je préfère le deuxième exemple (plus court) en divisant cette ligne sur deux lignes ne simplifie pas la lecture du tout.