Используете статический экземпляр DbProviderFactory в ADO.NET?

Я использую следующий код в моем приложении asp.net. Согласно этому коду, для всех пользователей приложения будет только один экземпляр DBProviderFactory. Создаст ли это проблему в многопользовательской среде? Таким образом, все пользователи будут использовать один и тот же объект DbProviderFactory для создания соединений. Я не уверен, создаст ли это какой-то тип скрытых проблем в многопользовательской среде.

Причина, по которой я использую статический экземпляр для DbProviderFactory, заключается в том, что метод GetFactory не вызывается каждый раз, когда требуется создать экземпляр подключения. Это, я думаю, позволило бы быстрее получить объект подключения. Есть ли недостатки в моих рассуждениях?

 public class DatabaseAccess
{

    private static readonly DbProviderFactory _dbProviderFactory =
 DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ProviderName);

    public static DbConnection GetDbConnection()
    {
        DbConnection con = _dbProviderFactory.CreateConnection(); 
        con.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DB"].ConnectionString;
        return con;
    }
}

1 ответ

Решение

Это выглядит хорошо, но, вероятно, не создаст интересную эффективность.

Создание объектов в.NET быстро. Поэтому создание фабрики не займет много времени. Получение соединения из удаленной базы данных происходит, но с пулом соединений это обычно не проблема.

Вероятно, фабрика не реализует свое собственное состояние и выглядит так, что она, вероятно, неизменна. Так что доступ из разных потоков, вероятно, в порядке.

Статические объекты не являются сборщиком мусора. Я сомневаюсь, что завод будет расти в размерах, так что это не должно быть проблемой.

Таким образом, вы избегаете кучу дешевых созданий объектов, кучу дешевых фоновых сборок мусора и имеете небольшой риск того, что производный класс действительно имеет состояние и не является поточно-ориентированным в зависимости от точной реализации, возвращаемой GetFactory.

Другие вопросы по тегам