2009-02-10 2 views
5

Учитывая следующий фрагмент кода:C#: ObjectTrackingEnabled = false стоит для небольших операций?

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

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

Стоит ли установка объекта слежения ложь? Я знаю, что это всего лишь одна строка кода, но мне кажется, что мне приходится писать все это время. Но я слышал, что вы можете получить некоторое повышение производительности, превратив его, когда вам это не нужно. И поскольку мне просто нужно быстро прочитать некоторые данные, мне не нужно отслеживать. Но стоит ли это в таком маленьком фрагменте кода? Каково твое мнение? Должен ли я использовать его? Разве я не должен? Зачем?

ответ

9

Если контекст будет расположен непосредственно, это, вероятно, не стоит - но вот несколько мыслей:

  • возможно написать «свободно» метод расширения для данных контекстов (ниже)
  • сделать его по умолчанию, путем добавления частичного OnCreated метод, который делает это

свободный пример расширения:

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

} 

Затем вы можете использовать:

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

Частичный метод Пример:

namespace MyData { 
    partial class MyDataContext { 
     partial void OnCreated() { 
      this.ObjectTrackingEnabled = false; 
     } 
    } 
} 
Смежные вопросы