2009-02-10 9 views
5

Dato il seguente pezzo di codice:C#: ObjectTrackingEnabled = false ne vale la pena per le piccole operazioni?

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

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

Ne vale la pena l'impostazione di monitoraggio su false oggetto? So che è solo una riga di codice, ma è una specie di bug che devo scrivere tutto il tempo. Ma ho sentito che puoi avere un po 'di guadagno quando non ne hai bisogno. E poiché ho solo bisogno di leggere rapidamente alcuni dati, non ho bisogno del tracciamento. Ma ne vale la pena in un pezzo così piccolo di codice? Qual è la tua opinione? Dovrei usarlo? Non dovrei? Perché?

risposta

9

Se il contesto sta per essere smaltita subito, probabilmente non vale la pena - ma ecco alcuni pensieri:

  • forse scrivere un metodo di estensione "fluente" per data-contesti (sotto)
  • renderlo predefinito, aggiungendo un metodo OnCreated parziale che fa

esempio estensione Ottima:

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

} 

quindi è possibile utilizzare:

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

metodo esempio parziale:

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