我的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文件的原因(在应用程序运行时更改设置?)我对这里的内部工作概念很少。优缺点都有什么?您是否认为通过实施上述功能可以获得较小的性能提升?
感谢
答案 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,我会说您的方法是正确的。将值存储在应用程序存储上,您将避免从磁盘反复读取连接字符串。
如果需要更改连接字符串,则必须重新启动应用程序。连接字符串不应该每天更改,所以这不应该是一个问题。
顺便说一句:我不太喜欢在哪个环境中询问你的逻辑。这根本不是必要的......