Linq-to-SQL DataContext в нескольких потоках - PullRequest
14 голосов
/ 07 февраля 2011

Как мне обработать Linq-to_SQL DataContext в нескольких потоках?

Должен ли я создавать глобальный статический DataContext, который все потоки используют и фиксируют изменения в самом конце, или я должен создать контекст для потока и использовать этот экземпляр для всего, что находится внутри этого потока?

1 Ответ

15 голосов
/ 07 февраля 2011

DataContext не является поточно-ориентированным;использование его напрямую из нескольких потоков вызовет #fail;наличие глобального статического контекста данных вызовет #fail , а вызовет неконтролируемый рост памяти (контекст данных включает в себя диспетчер идентификации и трекер изменений для каждого извлеченного объекта; это только увеличивается завремя, когда затрагивается больше объектов)

В идеале контекст данных следует использовать для единицы работы;раскрутить один;сделайте что-то (это ограничено областью действия, т. е. не все время жизни приложения) и утилизируйте его.Таким образом, IMO реальный ответ здесь «привязать его к этой единице работы».Только вы можете знать, что это в вашем приложении;это может быть один метод, это может быть запрос страницы на веб-странице, это может быть отметка таймера в службе.Кто знает ...

...