Когда должен я открывать и закрывать соединение с SQL Server

В этой статье Taranfx (2009-08-29) сравнивается производительность Java 5, 6 и 7 на 4 простых тестах.

37
задан Martin 14 May 2009 в 04:27
поделиться

6 ответов

Нет, не сохраняйте статическое SqlConnection , если вам не нужно. Одной из проблем будет создание потоков, но, что более важно, обычно в этом просто нет необходимости. С представленным кодом внутренний пул соединений означает, что большую часть времени вы в любом случае будете получать одно и то же базовое соединение при последовательных вызовах (при условии, что вы используете одну и ту же строку подключения). Пусть пуллер сделает свое дело; оставьте код в покое.

Это также позволяет избежать проблем, связанных с тем, что происходит, когда вы начинаете иметь два потока ... теперь каждый может работать над своим собственным соединением; со статикой (при условии, что вы не используете [ThreadStatic] ) вам придется синхронизировать, что приведет к задержкам. Не говоря уже о повторном входе (то есть один поток пытается использовать одно и то же соединение дважды в одно и то же время). Ага; оставьте код в покое.

46
ответ дан 27 November 2019 в 04:34
поделиться

Поскольку SqlConnection имеет пул соединений, когда вы вызываете Open () и Close (), вы фактически не открываете и не закрываете физическое соединение с сервером. Вы просто добавляете / удаляете соединение из пула доступных соединений. По этой причине рекомендуется открывать соединение как можно позже и закрывать соединение как можно раньше после выполнения вашей команды.

20
ответ дан 27 November 2019 в 04:34
поделиться

В вашем примере кода нет необходимости вызывать метод close () для объекта подключения, поскольку он будет обрабатываться автоматически из-за того, что код находится внутри блока using.

5
ответ дан 27 November 2019 в 04:34
поделиться

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

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

3
ответ дан 27 November 2019 в 04:34
поделиться

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

1
ответ дан 27 November 2019 в 04:34
поделиться

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

-1
ответ дан 27 November 2019 в 04:34
поделиться
Другие вопросы по тегам:

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