2009-02-10 5 views
5

Vu le morceau de code suivant:C#: ObjectTrackingEnabled = false vaut-il la peine pour les petites opérations?

using(var data = new SomeDataContext(ConnectionString)) 
{ 
    data.ObjectTrackingEnabled = false; 

    foreach(Something in data.Somethings) 
    someList.Add(something.SomeProperty); 
} 

est-il objet la peine à suivre la mise en faux? Je sais que c'est juste une ligne de code, mais ça me gêne de devoir l'écrire tout le temps. Mais j'ai entendu dire que vous pouvez avoir un gain de performance en le tournant lorsque vous n'en avez pas besoin. Et puisque j'ai juste besoin de lire rapidement certaines données, je n'ai pas besoin du suivi. Mais en vaut-il la peine dans un si petit morceau de code? Quel est ton opinion? Devrais-je l'utiliser? Ne devrais-je pas? Pourquoi?

Répondre

9

Si le contexte va être immédiatement éliminé, il est sans doute pas la peine - mais voici quelques réflexions:

  • écrivent peut-être une méthode d'extension « fluent » pour des contextes données (ci-dessous)
  • font le défaut, en ajoutant un procédé OnCreated partiel qui le fait

exemple d'extension Courant:

public static class DataContextExt { 
    public static T NoTracking<T>(this T ctx) 
     where T : DataContext 
    { 
     ctx.ObjectTrackingEnabled = false; 
     return ctx; 
    } 

} 

Ensuite, vous pouvez utiliser:

using(var data = new SomeDataContext(ConnectionString).NoTracking()) 
{...} 

Exemple de méthode partielle:

namespace MyData { 
    partial class MyDataContext { 
     partial void OnCreated() { 
      this.ObjectTrackingEnabled = false; 
     } 
    } 
} 
Questions connexes