Я сделал класс для DB связи, как это:.NET SQL Connection Течь
public class DbHelper : IDisposable
{
private bool disposed;
public DbHelper()
{
disposed = false;
}
public static SqlConnection ConnectionSender()
{
var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbname"].ConnectionString);
return conn;
}
public System.Int32 ExecuteNonQuerySender(SqlCommand cmd)
{
System.Int32 result;
using (var conn = ConnectionSender())
{
conn.Open();
cmd.Connection = conn;
result = cmd.ExecuteNonQuery();
}
return result;
}
~DbHelper()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
}
}
disposed = true;
}
}
Я называю этот класс using
метод:
var cmdParent = new SqlCommand { CommandText = sqlQuery };
using (var helper = new DbHelper())
{
dt = helper.ExecuteNonQuerySender(cmdParent);
}
Это прекрасно работает, но мой сервер перегружен, и я подозреваю, о утечке БД. Объекты соединения DB должны быть закрыты и удалены в этом коде. Я сделал что-то не так? (программно) Я знаю, что есть также профессиональные способы решения соединения с БД, но я хочу попробовать этот код.
Вы должны использовать только класс деструкторов при отключении распределения неуправляемых ресурсов Почему вы используете один здесь и вы * уверены * это соединение, которое протекает – Amy
Почему DbHelper IDisposable, если вы ничего не делаете в методе Dispose? –
Вы уверены, что его не что-то на сервере, такое как многочисленные строки, требуют индексирования, огромного количества одновременного запроса, плохой конфигурации? Все, что отправил код, выглядят отлично. не ссылайтесь ни на что. –