2009-09-01 3 views
2

Du point de vue des performances, est-il préférable d'encapsuler chaque instruction utilisant LINQ dans une instruction using() ou de déclarer une instance de niveau classe et de l'utiliser dans chaque méthode?Question sur les performances LINQ2Sql en C#

Par exemple:

public void UpdateSomeRecord(Record recordToUpdate) 
{ 
    using(var entities = new RecordDBEntities()) 
    { 
     // logic here... 
    } 
} 


private RecordDBEntities entites = new RecordDBEntities(); 
public void UpdateSomeRecord(Record recordToUpdate) 
{ 
    // logic here... 
} 

Ou est-ce pas d'importance de toute façon?

Merci!

Répondre

3

La déclaration using peut nuire à la performance dans le sens où il faudra plus de temps à courir, mais cela ne devrait pas être votre préoccupation dans les cas comme celui-ci. Si un type implémente IDisposable il devrait vraiment être enveloppé dans une instruction using afin qu'il puisse nettoyer après lui-même.

Ce code de nettoyage prendra plus de temps à s'exécuter que pas de code de nettoyage bien sûr, c'est pourquoi je dis que l'instruction using prendra plus de temps à s'exécuter. Mais cela ne signifie pas que vous ne doit pas avoir l'instruction using. Je pense que vous devrait utiliser l'instruction using même si cela peut prendre plus de temps pour s'exécuter. Je suppose que ce que j'essaie de dire, c'est que vous comparez des pommes à des oranges, car les comparaisons de performance n'ont de sens que lorsque le code comparé crée une sortie identique et des effets secondaires identiques. Vos exemples ne le font pas, c'est pourquoi je ne pense pas que ce soit un problème de performance.

La meilleure pratique dans cette situation est d'utiliser la déclaration using sur les types qui mettent en œuvre IDisposable indépendamment du fait que la déclaration using fera la course méthode plus. Si vous avez besoin de savoir comment beaucoup plus longtemps il fonctionnera alors vous devez employer un profileur pour identifier si le code en question crée un goulot d'étranglement.

+0

OK ce genre de logique. Le code que j'ai posté provient d'une interface que je construis, mais il n'implémente pas la méthode disposer. Je suppose que je pourrais l'ajouter et l'appeler dans la section principale, mais d'après ce que vous dites, il serait préférable à long terme d'envelopper chaque segment dans sa propre déclaration Utilisation pour prendre soin de l'élimination, n'est-ce pas? – Anders

+0

J'imagine que ma question était mal formée. Peut-être que les meilleures pratiques à la place: Quelle est la meilleure pratique pour les requêtes LINQ en C#? – Anders

+0

Ne pas * ajouter * une implémentation de 'IDisposable' si elle n'existe pas et n'est pas nécessaire. Si vous n'avez pas besoin de disposer de ressources non gérées, vous n'avez pas besoin de l'interface! :) Pour plus d'informations, veuillez consulter http://msdn.microsoft.com/fr-fr/library/system.idisposable.aspx. –