在ADO.NET中使用DbProviderFactory的静态实例



我在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;
    }
}

它看起来不错,但可能不会产生有趣的效率。

在.NET中创建对象很快。因此,创建工厂不需要花费太多时间。从远程数据库获取连接确实可以,但对于连接池,这通常不是问题。

工厂可能没有实现自己的任何状态&看起来它可能是不可变的。因此,从不同线程进行访问可能是可以的。

静态对象不会被垃圾收集。我怀疑工厂的规模会扩大,所以这应该不是问题。

因此,您可以避免大量廉价的对象创建、大量廉价的后台垃圾收集,并且根据GetFactory 返回的确切实现,派生类实际上具有状态而不是线程安全的风险很小。

相关内容

  • 没有找到相关文章

最新更新