1

我的 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 文件肯定是有原因的(在应用程序运行时更改设置?)我对这里的内部工作原理知之甚少。优缺点都有什么?您认为通过实现上述功能我会看到小的性能提升吗?

谢谢

4

2 回答 2

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 文件。

于 2010-04-09T12:05:02.450 回答
3

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

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

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

顺便说一句:我不太喜欢询问您在哪个环境中的逻辑。那根本就没有必要……

于 2010-04-09T12:29:39.480 回答