2009-02-10 12 views
5

Dado el siguiente fragmento de código:C#: ¿Valora ObjectTrackingEnabled = false para pequeñas operaciones?

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

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

¿Vale la pena ajuste de seguimiento a falso objeto? Sé que es solo una línea de código, pero me molesta tener que escribirla todo el tiempo. Pero he oído que puede obtener algo de rendimiento al activarlo cuando no lo necesita. Y como solo necesito leer rápidamente algunos datos, no necesito el seguimiento. Pero, ¿vale la pena en un fragmento de código tan pequeño? ¿Cuál es tu opinión? ¿Debo usarlo? ¿No debería? ¿Por qué?

Respuesta

9

Si el contexto va a ser eliminados de inmediato, es probable que no vale la pena - pero aquí hay algunas ideas:

  • tal vez escribir un método de extensión "fluidez" para datos de contextos (abajo)
  • hacen que el valor predeterminado, mediante la adición de un método parcial OnCreated que lo hace

ejemplo extensión Fluido:

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

} 

continuación, puede utilizar:

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

Ejemplo parcial método:

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