Нужно ли открывать и закрывать соединение с базой данных каждый раз, если я хочу писать данные из базы данных в файл .txt один раз в минуту? [Дубликат]

lambda lst: reduce(lambda a,b:(b,b==a[0] and a[1]), lst, (lst[0], True))[1]

Следующее короткое замыкание:

all(itertools.imap(lambda i:yourlist[i]==yourlist[i+1], xrange(len(yourlist)-1)))
7
задан Mikayil Abdullayev 11 October 2012 в 19:36
поделиться

2 ответа

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

Нет, вы должны использовать новое соединение каждый раз, это стандартная практика что Microsoft рекомендует. Если вы используете ODBC и т. Д., Тогда окна управляют этими соединениями, кэшируют их для повторного использования и упрощают управление временем жизни.

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

Чтобы развертывать высокопроизводительные приложения, вы часто должны использовать пул соединений. Однако, когда вы используете поставщик данных .NET Framework для ODBC, вам не нужно включать пул соединений, потому что провайдер управляет этим автоматически.

См. OdbcConnection для Дополнительная информация.

6
ответ дан Ian 17 August 2018 в 22:45
поделиться
  • 1
    Windows не обрабатывает соединения, но CLR имеет ConnectionPool. – Henk Holterman 11 October 2012 в 12:50
  • 2
    @HenkHolterman, правильно ли, что ConnectionPool, о котором вы говорите, на самом деле является просто сквозным подключением пула MSSQL , если он включен? Кроме того, он будет применять аналогичные действия для любой другой реализации базы данных, которая могла бы ? – Mike Perrenoud 11 October 2012 в 12:53
  • 3
    @HenkHolterman BCL обрабатывает объединение не во время выполнения – Rune FS 11 October 2012 в 12:55
  • 4
    @Mike: Я считаю, что это ODBC для Windows и не полагается на SQL. Попробуйте открыть «Администратор источника данных ODBC». приложения в Windows и нажмите «Пул соединений» - посмотрите, указана ли ваша база данных оракула. – Ian 11 October 2012 в 12:55

В общем случае нет, вы не должны использовать одно соединение - все поставщики .NET ADO.NET поддерживают объединение пулов, а обычный шаблон - открывать / закрывать соединения по мере необходимости (в using или try/finally, чтобы убедиться, что соединение закрыто в случае исключения).

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

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

1
ответ дан Joe 17 August 2018 в 22:45
поделиться
Другие вопросы по тегам:

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