ConfigurationManager.AppSettingscaching

我们知道IIS高速cachingConfigurationManager.AppSettings,所以它只读取一次磁盘,直到web.config被更改。 这是为了性能目的而完成的。

有人在:

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

表示.NET Framework不会为app.config执行相同的操作,但是它会从磁盘读取每个请求。 但我觉得很难相信,因为它会变慢。 请告诉我他是错的,否则我将不得不修复我编写的每个控制台/ Windows窗体/ Windows服务。

更新我很遗憾,我误解了人们在上面的链接论坛中所说的话。

快速testing似乎表明,这些设置只在应用程序启动时加载。

//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(); 

你会看到所有的输出保持不变。

它在应用程序启动时读取应用程序configuration文件(MyApp.exe.config)一次,这可以通过在应用程序运行时更改文件来轻松validation。

OP引用的论坛post中的评论是:

当应用程序启动时,Web.config的值被存储在caching/内存中,因此,当对web.config进行任何更改时,应用程序将重新启动。 请注意,这仅适用于Web.config, 默认情况下,您可能使用的任何其他.config文件都是从磁盘访问的

我会解释这个意思,意思是ASP.NET应用程序中的web.config以外的configuration文件是默认从磁盘访问的。 同样,默认情况下,WinForms / Console应用程序中除MyApp.exe.config之外的configuration文件将从磁盘访问。

此注释并不是说默认情况下从磁盘读取MyApp.exe.config。

不pipe它有没有关系。 如果没有解决性能问题,请不要修复。

AppSettings被caching。 您可以通过进一步caching来提高性能,以限制namevaluecollection查找。

请参阅: DotNetPearls静态configuration模式

正如约翰所说,如果你真的看到了一个性能问题,只能在这个上花更多的时间。

另外,我非常确定这些应用程序将configuration保存在内存中 ,并且要查看configuration中的任何更改,应用程序将不得不重新启动

关于剩余的奥秘进一步阅读 。