![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
adLucem |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
Вопрос можно разделить на два:
1. Сколько объектов соединений нужно использовать в процессе? 1. Определяется использованием многопоточных транзакций. В рамках каждого потока следует изолировать объекты соединений. Следовательно, если в программе параллельно может работать несколько потоков, каждый из которых связывается с базой данных, то каждый из потоков должен использовать только собственные объекты соединений. 2. Сколько соединений следует держать открытыми в каждом потоке? Определяется архитектурой приложения, которая касается обработки транзакций, то есть количество соединений на поток должно минимальным, но не меньше чем необходимо с технической точки зрения. Например, если архитектура базируется не на отсоединенных таблицах данных а на обработке множества записей (с использованием DbDataReader), то несколько соединений может понадобиться при параллельном доступе нескольких классов, каждый из которых осуществляет получение данных с использованием множества записей (так как на одном открытом соединении в каждый момент времени может быть открыто только одно множество записей). Итого. Количество соединений определяется с одной стороны, количеством параллельных транзакций, а с другой стороны, количеством соединений, необходимых для выполнения каждой транзакции. Соединения следует либо закрывать после окончания работы с ними, либо использовать класс оболочку, который является высокоуровневым пулом соединений и гарантирует правильность работы с ними (в частности отслеживает состояние соединений). Область использования приложений с одним, постоянно открытым соединением вообще мне не ясна. |
|||
|
||||
emmanuil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
Может оно и так, но скорее всего в пуле находятся сведения авторизации и прочее. А вот при создании нового соединения @@spid каждый раз разный, а весь смысл в том чтобы @@spid был одинаковый. @@spid у каждого коннекта разный, это сделано для того чтобы не было конфликтов между пользователями. Допустим при создании локальной временной таблицы в базе, ее не видит другой пользователь, у которого другой @@spid. @@spid - это проще говоря сеанс, пространство, которое отводится для соединения!
А пул на это никак ни влияет! Так и не нашел однозначного ответа! И в одном способе есть плюсы и минусы и в другом! А как наиболее эффективно сделать, ответа не получил. Наверное все зависит от конкретной задачи! Ну что ж, всем спасибо! Если еще есть мнения, буду рад! |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |