Показать сообщение отдельно
Старый 22.11.2006, 15:21   #8
Mad
Пользователи
 
Регистрация: 20.07.2006
Сообщений: 168
По умолчанию

Цитата:
Я долго тоже парился с этими соединениями. В итоге проблему удалось устранить вот каким способом:

После:

connection.Close();

я вставляю всегда:

V8DbConnection.ClearPool();

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

После connection.close() твой коннекшн, если нет невысвобожденных объектов, попадает в пул соединений. В результате, при следующем обращении пользователя к той же базе, не создается новый коннекшн, а вытаскивается старый из пула. На этом экономится время. Порой существенное. Если тебя напрягает количество соединений в пуле (они ведь тоже жрут лицензии) балуйся параметрами PoolCapacity и PoolTimeout в Web.config. В результате для активных пользователей их коннекшены будут оперативно подтягиваться, а редкий гость должен будет подождать.

V8DbConnection.ClearPool() убивает пул намертво (если не ошибаюсь, то не только того приложения, из которого вызвана данная функция, но всех, запущенных на вэб-узле). И без того нешустрое вэбрасширение после такой операции будет вынуждено каждый раз(!) открывать соединение (читай тянуть и компилить конфу). Не уверен, что это хорошо.

В данной же ветке описана ситуация, когда коннекшн не может быть закрыт корректно. И он не закрывается и не попадает в пул. В результате при следующих обращениях того же пользователя он, коннекшн, не используется, а создается новый. Такая беда возникает в случаях, когда посредством данного коннекшена из 1С вытаскивается некоторый ComObject и не высвобождается до закрытия коннекшена. Для вылавливания таких ситуаций и используется Трассировка высвобождения Com-объектов (1С:Предприятие 8.0 Web-расширение 1.1 Руководство по установке и использованию, Москва, 2005, номер издания 80.010.01, стр. 209)
Mad вне форума   Ответить с цитированием