ConfigurationManager.AppSettings缓存

时间:2008-12-23 16:33:32

标签: asp.net .net performance caching configurationmanager

我们知道IIS会缓存ConfigurationManager.AppSettings,因此它只会读取磁盘一次,直到更改了web.config。这样做是出于性能目的。

有人在:

http://forums.asp.net/p/1080926/1598469.aspx#1598469

声明.NET Framework不会对app.config执行相同操作,但它会从磁盘读取每个请求。但我觉得很难相信,因为它会变慢。请告诉我他错了,或者我必须修复我写的每个控制台/ Windows窗体/ Windows服务。

更新我很遗憾我误解了人们在上述链接论坛中所说的内容。

6 个答案:

答案 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查找来提高性能。

请参阅:DotNetPearls Static Config Pattern

答案 3 :(得分:1)

它是否有效并不重要。如果没有性能问题,请不要修复性能问题。

答案 4 :(得分:1)

正如约翰所说,如果你实际上看到了性能损失,那么只会花更多的时间。

此外,我非常确定这些应用程序在内存中保留配置,并且要查看配置中的任何更改,应用程序必须重新启动

对于某些further reading关于剩余的奥秘。

答案 5 :(得分:1)

尝试一下,

ConfigurationManager.RefreshSection("appSettings")

请小心文件名(在bin文件夹中)

普通文件名:appname。 exe.config

如果是调试模式:appname。 vshost.exe.Config