Вопрос по – Закрывать или не закрывать Oracle Connection?

5

У моего приложения есть проблемы с производительностью, поэтому я начал исследовать это из корня: & quot; Соединение с базой данных & quot ;.

Лучшие практики гласят: «Открыть соединение, использовать его и закрыть как можно скорее», но я не знаю, какие это накладные расходы, поэтому возникает вопрос:

1 - & quot; Открывать, использовать, закрывать соединения как можно быстрее - это лучший подход с использованием ODP.NET?"

2 - Есть ли способ и как использовать пул соединений с ODP.NET? Я думал о том, чтобы создать список для хранения некоторых строк подключений и создать логику для выбора «наилучшего». связь каждый раз, когда мне нужно. Это лучший способ сделать это?

Вы говорите о клиент-серверном приложении? Или трехуровневое приложение? Вы утверждаете, что профилировали приложение и определили, что открытие и закрытие соединений с базой данных является узким местом? Или вы просто предполагаете, что проблемы с производительностью могут быть связаны с базой данных? Justin Cave
Джастин. Да, это приложение Asp.Net, так что это клиент / сервер с 3 или 4 уровнями, «Операция открытого подключения». не является узким местом, но я думаю, что это способствует снижению производительности (если не используется правильно). Ewerton
APC. По мнению команды Microsoft Ado.Net, это лучшая практика. Смотрите ответ ниже Ewerton
Чья это лучшая практика? Открытие соединения с базой данных является дорогостоящей и трудоемкой операцией. Поэтому лучший совет - держать соединения открытыми и использовать как можно дольше. APC

Ваш Ответ

3   ответа
6

Вот набор слайдов, содержащий рекомендуемые рекомендации Oracle:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

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

Пожалуйста, обратитесь к онлайн-справке ODP.NET за подробной информацией о пуле соединений. Настройки пула добавляются в строку подключения.

Еще одна проблема, с которой люди часто сталкиваются с OracleConnections, заключается в том, что сборщик мусора не осознает, насколько они ресурсоемки, и не убирает их быстро. Это усугубляется тем фактом, что ODP.NET не полностью управляется, и поэтому некоторые ресурсы скрыты от сборщика мусора. Следовательно, рекомендуется использовать метод Close () И Dispose () для всех объектов Oracle ODP.NET (включая OracleConnection), чтобы принудительно их очистить.

Эта конкретная проблема будет устранена у полностью управляемого провайдера Oracle (бета-версия выйдет в ближайшее время)

(РЕДАКТИРОВАТЬ: ODP.NET, теперь доступен управляемый драйвер.)

Кристиан Шей

оракул

0

Для одной транзакции это лучше, но для нескольких транзакций, когда вы фиксируете в конце, это может быть не лучшим решением. Вы должны держать соединение открытым, пока транзакция не будет зафиксирована или откатана. Как вы управляете этим, а также как вы проверяете, что в этом случае соединение все еще существует? (Т. Е. Сбой сети). Существует свойство ConnectionState.Broken, которое не работает в данный момент.

1

Лучшая практика для ADO.Net - Открыть, Получить данные (в память), закрыть, использовать в памяти данные. Например, используя OracleDataReader для загрузки данных в DataTable в память и закрытия соединения.

[] & APOS; s

Похожие вопросы