2012-07-01 4 views
2

при использовании Linq-to-Sql Visual Studio создает для вас класс DataContext. Мне интересно, когда создавать экземпляр этого контекста, в одном из моих проектов я использовал один экземпляр DataContext для примерно 300 команд CRUD (весь проект), и он работал с небольшой проблемой, которую мне удалось решить позже, и в моем недавнем проекте у меня есть создал экземпляр из команды CRUD, теперь вот вопрос, что является лучшим способом использования DataContext? по одной команде или по одному на проект? или, возможно, один за транзакцию (что, я думаю, тоже хорошая идея)? И есть ли разница в скорости и производительности в каждом направлении?Практический пример области данных DataContext

ответ

4

Когда вы держите его слишком коротким, вы теряете производительность, потому что создание экземпляра DataContext не совсем бесплатное. Это дешево, но измеримо. Он отображается в профилях.

Когда вы держите его открытым слишком долго вы получите проблемы тоже:

  1. объектов начинают накапливаться в нем
  2. Вы не можете использовать его в нескольких потоках или нескольких сделок одновременно в любом случае
  3. Если один из ваших SubmitChanges не может по какой-то логической причине, контекст мертв, потому что та же ошибка будет появляться всегда, независимо от того, как часто вы повторить

Вот некоторые правила WHA т вы никогда не должны делать без глубокого понимания:

  1. У вас есть один DataContext для нескольких HTTP-запросов/WCF-вызовы
  2. Есть DataContext для неограниченного количества времени (т.е. продолжительность рабочего стола приложение nunning)
  3. Есть DataContext для неограниченного числа отслеживаемых субъектов
  4. Используйте его по потокам
+0

что вы имеете в виде гусеничных сущностей? –

+0

Когда вы запрашиваете сущность из базы данных, она остается навсегда в вашем DataContext. Отслеживается. – usr

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