从物理文件到Application对象(ASP.NET)读取连接字符串的优缺点?

时间:2010-04-09 11:52:36

标签: asp.net connection-string performance application-settings

我的ASP.NET应用程序读取xml文件以确定它当前所处的环境(例如本地,开发,生产)。

每次打开与数据库的连接时,它都会检查此文件,以便知道要从“应用程序设置”中获取哪个连接字符串。

我正在进入一个发展阶段,效率正在成为一个问题。我不认为在我希望访问数据库的过程中(非常经常)读取物理磁盘上的文件是个好主意。

我正在考虑在Application [“ConnectionString”]中存储连接字符串。所以代码将是

public static string GetConnectionString
        {
            if (Application["ConnectionString"] == null)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/ServerEnvironment.xml");
                XmlElement xe = (XmlElement) xnl[0];

                switch (xe.InnerText.ToString().ToLower())
                {
                    case "local":
                        connString = Settings.Default.ConnectionStringLocal;
                        break;

                    case "development":
                        connString = Settings.Default.ConnectionStringDevelopment;
                        break;

                    case "production":
                        connString = Settings.Default.ConnectionStringProduction;
                        break;

                    default:
                        throw new Exception("no connection string defined");
                }
                Application["ConnectionString"] = connString; 
            }
            return Application["ConnectionString"].ToString();
        }

我没有设计应用程序所以我认为每次都必须有一个读取xml文件的原因(在应用程序运行时更改设置?)我对这里的内部工作概念很少。优缺点都有什么?您是否认为通过实施上述功能可以获得较小的性能提升?

感谢

2 个答案:

答案 0 :(得分:7)

哇。扔进垃圾箱。

所有.config文件(web或app.config)都有专门用于连接字符串的部分,可以使用ConfigurationManager.ConnectionStrings属性读取这些部分。

对于本地和测试环境,我只需设置三个连接字符串,如下所示

<connectionStrings>
    <add name="default.local" connectionString="etc ..>
    <add name="default.test" connectionString="etc ..>
    <add name="default" connectionString="etc ..>
</connectionStrings>

根据配置文件中的其他设置确定要获取的连接。小实用程序功能利用此信息来选择正确的连接字符串。

通过这种方式,除了环境设置之外,配置文件在不同的部署中保持不变。

编辑:忘了提到这些值被缓存在内存中并且应用程序在更改时重新启动(可能有问题,可能有用)性能绝对可以通过ConfigurationManager类直接转到.config文件。

答案 1 :(得分:3)

我完全赞同詹姆斯韦斯特盖特。如果您使用web.config,则不必关心此问题。

如果您因任何原因无法使用web.config,我会说您的方法是正确的。将值存储在应用程序存储上,您将避免从磁盘反复读取连接字符串。

如果需要更改连接字符串,则必须重新启动应用程序。连接字符串不应该每天更改,所以这不应该是一个问题。

顺便说一句:我不太喜欢在哪个环境中询问你的逻辑。这根本不是必要的......