powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Открытый SqlConnection/System.Data.Linq.DataContext в .NET
12 сообщений из 12, страница 1 из 1
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36563514
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой вопрос. Что предпочтительнее - держать открытым SqlConnection/DataContext на всё время работы программы либо перед каждым запросом его открывать, а потом закрывать?
Начальник говорит, что открытый SqlConnection жрёт много ресурсов, где-то по форумам читал, что открытие/закрытие соединения с БД жрёт много ресурсов. Так кто прав?
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36563599
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывать контекст или соединение только для обращения к БД и сразу же, как только надобность в БД отпала, закрывать.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36563883
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как быть с DataContext? У него же нет методов Open/Close.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36563923
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RazielА как быть с DataContext? У него же нет методов Open/Close.
Код: plaintext
1.
2.
3.
using (NorthwindDataContext ctx = new NorthwindDataContext())
{
    // ...
}

P.S. Посмотрите еще паттерн Repository.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36564478
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RazielА как быть с DataContext? У него же нет методов Open/Close.
DataContext не держит открытых соединений, следовательно без нужды вызывать Dispose() у него не обязательно.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36564918
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raziel, не слушайте никого и знайте: юзинговать (диспоузить) нужно всё, что наследуется от IDisposable при условии, если оно уже не нужно.
Используйте using и не заморачивайтесь над тем, открыто ли соединение, созданы ли какие-то доп. экземпляры классов и прочее.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #36565446
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУRaziel, не слушайте никого и знайте: юзинговать (диспоузить) нужно всё, что наследуется от IDisposable при условии, если оно уже не нужно.

Ключевое слово у тебя - "если оно уже не нужно". Если нужно, using-ом не воспользоваться, то конкретно DataContext диспоузить не обязательно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #37327774
Questq2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если у меня 15 объектов, работающих каждый в своем потоке, и каждый делает 5 запросов в секунду к одной и то же таблице БД. Как правильно организовать работу с DataContext?:

1. Создавать DataContext на уровне объекта, чтобы для каждого потока был свой DataContext. Я делаю его статическим.

Код: plaintext
public static MyDataBaseDataContext = new MyDataBaseDataContext;

При такой кострукции, после нескольких срабатываний, я получаю ошибку, что "Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть"

2. Создавать DataContext перед выполнение каждого запроса через

Код: plaintext
using (var dc = new MyDataBaseDataContext()) {}

Но резульататы LINQ запроса мне надо отрисовывать, то есть обрабоку полученного query мне нужно делегировать в поток диспетчера, а если внутри using {} попыаться сделать что-то типа MyWindow.Dispatcher.BeginInvoke(new ThreadStart(() => и т.д., то все падает с ошибкой.

3. Если просто в начале метода, без using, создавать DataContext

Код: plaintext
var dc = new MyDataBaseDataContext()

...то так работает и не падает, по идет дикая загрузука ЦП от sqlservr.exe.

Как правильно организовать работу с DataContext в моем случае, то есть в случае большого и постоянного количества запросов к БД?
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #37329394
VitaliyBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Questq2,

Я бы использовал первый вариант (создание DataContext-а на уровне объекта). А почему Вы его делаете static?
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #37329466
Questq2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VitaliyBoris, статик - просто для удобства обращения к нему. Думаете, ошибка связана с этим?
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #37329494
Questq2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VitaliyBoris, я убрал статик, падать перестало, но загрузка проца осталась. Значит, видимо, дело не в коннекте.

Я создал отдельную тему по своей проблеме http://www.sql.ru/forum/actualthread.aspx?tid=862740, там все описано более подробно. В двух словах - формально все работает, но очень ресурсов много проца жрет sqlservr.exe, при любом варианте использования DataContext.
...
Рейтинг: 0 / 0
Открытый SqlConnection/System.Data.Linq.DataContext в .NET
    #37329495
Questq2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот рабочая ссылка http://www.sql.ru/forum/actualthread.aspx?tid=862740
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Открытый SqlConnection/System.Data.Linq.DataContext в .NET
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]