многопоточность c # - есть ли необходимость блокировать при записи в БД? - PullRequest
4 голосов
/ 11 сентября 2010

У меня есть многопоточное приложение C # 2.0, в котором каждый поток записывает некоторые результаты в таблицу базы данных SQL Server 2000.Есть только прямая команда INSERT и никакой другой логики.

Мой вопрос - нужно ли блокировать методы, которые записывают результаты в базу данных?На данный момент блокировка есть, но я подозреваю, что она сильно замедляет работу приложения.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 11 сентября 2010

Как было предложено ранее, «SqlConnection не является поточно-ориентированным».

Просто попробуйте открыть соединение один раз во время вашего приложения, и у MS SQL Server есть внутренняя блокировка, чтобы предотвратить потерю данных, поэтому вам не нужно беспокоиться.

2 голосов
/ 11 сентября 2010

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

Edit2: Поскольку в этом случае не используется потокобезопасность, это означает, что вы не можете иметь один SqlConnection, общий для нескольких потоков,Но если у каждого потока есть свой SqlConnection, вставки в порядке.Сама база данных придерживается свойств ACID , поэтому одновременные соединения, пытающиеся вставить данные, безопасны и четко определены.

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

0 голосов
/ 11 сентября 2010

Поскольку мы говорим о MS SQL Server, я предполагаю, что они имеют внутренние блокировки для предотвращения повреждения данных. Большинство современных СУБД сделали бы это, иначе у них будут большие проблемы.

...