Вопрос о производительности LINQ2Sql в C # - PullRequest
2 голосов
/ 01 сентября 2009

С точки зрения производительности, лучше ли обернуть каждый оператор, использующий LINQ, в оператор using () или объявить экземпляр уровня класса и использовать его в каждом методе?

Например:

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


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

Или это не имеет значения в любом случае?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Оператор using может ухудшить производительность в том смысле, что для его выполнения потребуется больше времени, но это не должно беспокоить вас в подобных случаях. Если тип реализует IDisposable, он действительно должен быть заключен в оператор using, чтобы он мог очистить после себя.

Этот код очистки будет выполняться дольше, чем никакой код очистки, конечно, поэтому я и говорю, что оператор using будет выполняться дольше. Но это не значит, что у вас не должно быть заявления using. Я думаю, что вы должны использовать оператор using, хотя для его выполнения может потребоваться больше времени.

Я думаю, что я пытаюсь сказать, что вы сравниваете яблоки с апельсинами здесь, поскольку сравнение производительности имеет смысл только тогда, когда сравниваемый код создает идентичные выходные данные и идентичные побочные эффекты. Ваши примеры не так, что я, почему я не думаю, что это проблема производительности.

Лучшая практика в этой ситуации - использовать оператор using для типов, которые реализуют IDisposable, независимо от того, что оператор using сделает метод более длинным. Если вам нужно знать, как намного дольше он будет работать, вам следует использовать профилировщик, чтобы определить, создает ли данный код узкое место.

2 голосов
/ 01 сентября 2009

На самом деле ваш вопрос касается управления временем жизни LINQ DataContext.

Вы можете посмотреть следующую статью: Linq to SQL DataContext Lifetime Management

...