2009-09-01 8 views
2

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

Например:

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


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

Или это не имеет значения так или иначе?

Спасибо!

ответ

3

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

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

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

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

+0

OK, что вид имеет смысл. Код, который я опубликовал, связан с интерфейсом, который я создаю, но не реализует метод dispose. Полагаю, я мог бы добавить его и назвать его в основном разделе, но из того, что вы говорите, было бы лучше в конце концов обернуть каждый сегмент в свой собственный оператор Using, чтобы позаботиться об утилизации, правильно? – Anders

+0

Полагаю, мой вопрос был плохо сформирован. Возможно, лучшие практики: Какова наилучшая практика для запросов LINQ на C#? – Anders

+0

Не добавляйте * реализацию 'IDisposable', если она еще не существует и не нужна. Если вам не нужно избавляться от каких-либо неуправляемых ресурсов, тогда вам не нужен интерфейс! :) Для получения дополнительной информации ознакомьтесь с http://msdn.microsoft.com/en-us/library/system.idisposable.aspx. –

2

Фактически, ваш вопрос касается управления жизненным циклом LINQ DataContext.

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

+0

спасибо за ссылку! прочитаю :) – Anders

Смежные вопросы