Я разрабатываю оболочку базы данных для C #.
Ниже приведены два варианта, которые у меня есть:
Вариант А:
class DBWrapper:IDisposable
{
private SqlConnection sqlConn;
public DBWrapper()
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
public DataTable RunQuery(string Sql)
{
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
Вариант B:
class DBWrapper
{
public DBWrapper()
{
}
public DataTable RunQuery(string Sql)
{
SqlConnection sqlConn = new SqlConnection("my connection string");
.....implementation......
sqlConn.Close();
}
}
Для опции A соединение открывается, когда создается экземпляр класса. Поэтому независимо от того, сколько раз вызывающая сторона вызывает RunQuery, соединение всегда готово. Но если приложение создает экземпляр DBWrapper в начале приложения, соединение будет просто открыто и ничего не будет делать, пока приложение не будет завершено. Кроме того, он может иметь много экземпляров DBWrapper во время выполнения. Итак, это своего рода тратить ресурсы.
Для опции B у нее нет проблем, как у опции A, но новое соединение должно открываться и закрываться каждый раз, когда вызывающая сторона вызывает RunQuery. Я не уверен, насколько это повредит производительности.
Пожалуйста, поделитесь своим опытом. Спасибо за чтение.