В приложении C # следует ли создавать Соединение с БД один раз или каждый раз, когда выполняется оператор SQL?

В приложении C # должен быть создан OleDBConnection один раз, или каждый раз, когда выполняется оператор SQL?

Я смотрю на код C #, написанный кем-то другим. Каждому оператору SQL предшествует создание объекта OleDbConnection , строка подключения которого указывает на базу данных MDB.

Уместно ли каждый раз создавать объект OleDbConnection или объект должен создаваться в начале заявки и используется с тех пор.

11
задан CJ7 12 August 2010 в 03:35
поделиться

5 ответов

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

Если у вас есть функция, требующая интенсивного использования ЦП на клиентском ПК, вам следует выполнить эту задачу после закрытия соединения, чтобы не блокировать соединение.

Но если вам нужно выполнить ряд функций базы данных, производительность вашего клиента можно улучшить, выполняя их вместе в одном открытом соединении.

1
ответ дан 3 December 2019 в 06:44
поделиться

Согласно Best Practices for Using ADO.NET:

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

7
ответ дан 3 December 2019 в 06:44
поделиться

Предполагая, что пул соединений доступен для вашей базы данных, что вполне вероятно, вы захотите открывать и закрывать соединение для каждого обращения к базе данных. Это позволит вам использовать ограниченный ресурс соединения с базой данных только тогда, когда оно вам необходимо, а затем возвращать его в пул для использования другими абонентами, как только вы завершите вызов. Если вы будете удерживать соединение, то вскоре исчерпаете конечный ресурс, то есть общее количество доступных соединений с базой данных, и, следовательно, сильно затрудните масштабируемость и производительность вашего приложения.

Я обычно использую оператор using, чтобы гарантировать закрытие соединения после использования - см. ниже:

  using (ODBCConnection c = new ODBCConnection(ConnectionString))
  {
    c.Command.CommandType = CommandType.Text;
    // make a call
  }

Приятного аппетита!

7
ответ дан 3 December 2019 в 06:44
поделиться

Это зависит от ситуации.

Если вы собираетесь выполнять несколько операторов подряд, то с точки зрения производительности лучше открыть его один раз, выполнить все операторы, а затем закрыть,

Если вы спрашиваете о открывать соединение при запуске программы и держать его открытым до закрытия программы, независимо от того, что происходит, тогда нет. Закройте его, как только закончите. Лучше не оставлять соединение открытым.

Еще один фактор, о котором люди, кажется, никогда не задумываются, - это программист, который занимается обслуживанием позже, который должен отслеживать код и отслеживать, где открывается соединение и когда оно закрывается. Скажем, например, что у вас есть программа, которая обращается к базе данных, а затем разветвляется на несколько других функций, каждой из которых может потребоваться соединение. Отслеживание всего этого в коде - кошмар.

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

Главный фактор - это то, как это повлияет на производительность по сравнению с тем, как поддерживать соединение открытым. Вы должны решать это в каждой ситуации.

3
ответ дан 3 December 2019 в 06:44
поделиться

Вы должны открывать соединение каждый раз, когда вам нужно что-то из базы данных, а затем закрывать его. Оставьте пулу соединений решить, когда физически закрыть соединение.

0
ответ дан 3 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

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