Часто контекст данных «владеет» соединением, чтобы избежать необходимости постоянно извлекать его из пула и инициализировать его. Удаление контекста данных обычно удаляет это соединение.
Итак: если вы продолжаете создавать контексты данных без правильной их утилизации, вы теряете соединения, по крайней мере, до тех пор, пока GC не вмешается и не отменитбеспорядок (высвобождение неуправляемой части соединения обратно в неуправляемый пул, если является неуправляемой частью).
Это плохая вещь, что сильно ограничивает масштабируемость и увеличивает количество открытых соединений с вашим сервером базы данных. Так что да, вы должны избавиться от своих контекстов данных. Распространяя это на общий случай: вы распределяете любую IDisposable
вещь, которую вы несете ответственность за , когда вы закончите с этим. Возможно, с некоторыми исключениями (HttpClient
, DataTable
и т. Д.).
Обратите внимание, что C # 8 имеет несколько более резкое выражение (я бы сказал, «лучше», но это субъективно; мне это очень нравится)синтаксис для этого, если ваш оператор using
достигает конца текущей области (то есть до следующего }
):
using var context = CreateContextFactory().Create();
return context.QueryOpenConnectionCount();
или даже с более ранним C #, вы можете упростить его и удалитьместный:
using (var context = CreateContextFactory().Create())
{
return context.QueryOpenConnectionCount();
}