Название вроде как, у меня есть два простых кода:
using (var conn = new SqlConnection(connectionString))
{
using (var command = new SqlCommand(query, conn))
{
await conn.OpenAsync();
return await command.ExecuteNonQueryAsync();
}
}
и
using (var command = new SqlCommand(query, connection))
{
return await command.ExecuteNonQueryAsync();
}
Где во втором примере соединение создается и открывается один раз в конструкторе.Итак, первый - это практика, продвигаемая всеми (например, здесь и здесь ), но я вижу, что второй пример выполняется примерно на 50% быстрее.
Is isПравильно ли сохранять открытое соединение до тех пор, пока оно мне нужно (например, в каждом классе DAL), или я должен каждый раз открывать и закрывать его?Если поддержание открытого соединения является хорошей практикой, почему оно не продвигается?И, наконец, какова роль пула соединений?Разве это не должно поддерживать соединение открытым и живым для следующего использования?Потому что, когда я запускаю средство профилирования SQL, оно показывает, что каждый connection.Open()
вызывает логин аудита на стороне SQL.
Также см. здесь , который говорит прямо противоположное тому, что я вижу в профилировщике.,Он говорит, что connection.Open()
не должен приводить к операции spid.