В этой статье Taranfx (2009-08-29) сравнивается производительность Java 5, 6 и 7 на 4 простых тестах.
Нет, не сохраняйте статическое SqlConnection
, если вам не нужно. Одной из проблем будет создание потоков, но, что более важно, обычно в этом просто нет необходимости. С представленным кодом внутренний пул соединений означает, что большую часть времени вы в любом случае будете получать одно и то же базовое соединение при последовательных вызовах (при условии, что вы используете одну и ту же строку подключения). Пусть пуллер сделает свое дело; оставьте код в покое.
Это также позволяет избежать проблем, связанных с тем, что происходит, когда вы начинаете иметь два потока ... теперь каждый может работать над своим собственным соединением; со статикой (при условии, что вы не используете [ThreadStatic]
) вам придется синхронизировать, что приведет к задержкам. Не говоря уже о повторном входе (то есть один поток пытается использовать одно и то же соединение дважды в одно и то же время). Ага; оставьте код в покое.
Поскольку SqlConnection имеет пул соединений, когда вы вызываете Open () и Close (), вы фактически не открываете и не закрываете физическое соединение с сервером. Вы просто добавляете / удаляете соединение из пула доступных соединений. По этой причине рекомендуется открывать соединение как можно позже и закрывать соединение как можно раньше после выполнения вашей команды.
В вашем примере кода нет необходимости вызывать метод close () для объекта подключения, поскольку он будет обрабатываться автоматически из-за того, что код находится внутри блока using.
Большинство программистов верят в то, что открывать поздно и закрывать рано. Это проблема только в том случае, если задержка для открытия и закрытия соединения каждый раз приводит к замедлению работы всего приложения.
В вашем случае со статическим классом, вероятно, лучше каждый раз открывать и закрывать соединение.
Вы применяете лучшие практики. Открывайте его только прямо перед тем, как собираетесь запросить, и закрывайте его, как только сможете. Такие вещи сначала могут показаться расточительными, но на самом деле они делают ваше приложение более масштабируемым в долгосрочной перспективе.
Никогда не полагайтесь на само закрытие соединения. Если он не закрыт явно, это приведет к проблемам с производительностью. Это случилось с нами на нашем проекте. Да, я знаю, что соединениями управляет пул соединений, но они все равно должны быть закрыты и возвращены в пул.