我们知道IIS会缓存ConfigurationManager.AppSettings,因此它只会读取磁盘一次,直到更改了web.config。这样做是出于性能目的。
有人在:
http://forums.asp.net/p/1080926/1598469.aspx#1598469
声明.NET Framework不会对app.config执行相同操作,但它会从磁盘读取每个请求。但我觉得很难相信,因为它会变慢。请告诉我他错了,或者我必须修复我写的每个控制台/ Windows窗体/ Windows服务。
更新我很遗憾我误解了人们在上述链接论坛中所说的内容。
答案 0 :(得分:46)
快速测试似乎表明这些设置仅在应用程序启动时加载。
//edit the config file now.
Console.ReadLine();
Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString());
Console.WriteLine("Press enter to redisplay");
//edit the config file again now.
Console.ReadLine();
Console.WriteLine(ConfigurationManager.AppSettings["ApplicationName"].ToString());
Console.ReadLine();
您会看到所有输出都保持不变。
答案 1 :(得分:3)
它在应用程序启动时读取应用程序配置文件(MyApp.exe.config)一次,因为可以通过在应用程序运行时更改文件来轻松验证。
OP引用的论坛帖子中的评论是:
Web.config的值是 当存储到缓存/内存中时 应用程序启动因此应用程序 进行任何更改时重新启动 web.config。请注意,这只是 适用于Web.config,任何其他 访问您可能使用的.config文件 默认情况下从磁盘
我会将此注释解释为默认情况下从磁盘访问除ASP.NET中的web.config 之外的配置文件。同样,默认情况下,从磁盘访问WinForms / Console应用程序中除MyApp.exe.config之外的配置文件。
此注释并未声明默认情况下从磁盘读取MyApp.exe.config。
答案 2 :(得分:2)
AppSettings已缓存。您可以通过进一步缓存来限制namevaluecollection查找来提高性能。
答案 3 :(得分:1)
它是否有效并不重要。如果没有性能问题,请不要修复性能问题。
答案 4 :(得分:1)
正如约翰所说,如果你实际上看到了性能损失,那么只会花更多的时间。
此外,我非常确定这些应用程序在内存中保留配置,并且要查看配置中的任何更改,应用程序必须重新启动。
对于某些further reading关于剩余的奥秘。
答案 5 :(得分:1)
尝试一下,
ConfigurationManager.RefreshSection("appSettings")
请小心文件名(
普通文件名:appname。 exe.config
如果是调试模式:appname。 vshost.exe.Config