asp.net-ConfigurationManager.AppSettings缓存

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

有人在:

[HTTP://forums.asp.net/怕/1080926/1598469.aspx#1598469]

指出.NET Framework对app.config的作用不同,但它会针对每个请求从磁盘读取。 但是我很难相信,因为它会慢一些。 请告诉我他错了,否则我必须修复我编写的每个控制台/ Windows窗体/ Windows服务。

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

6个解决方案
48 votes

快速测试似乎表明这些设置仅在应用程序启动时加载。

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

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

ZombieSheep answered 2020-08-10T05:14:01Z
3 votes

它会在应用程序启动时读取一次应用程序配置文件(MyApp.exe.config),可以通过在应用程序运行时更改文件来轻松地进行验证。

OP引用的论坛帖子中的评论是:

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

我将此注释解释为默认情况下从磁盘访问ASP.NET应用程序中除web.config之外的配置文件。 同样,默认情况下,从磁盘访问WinForms / Console应用程序中MyApp.exe.config以外的配置文件。

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

Joe answered 2020-08-10T05:14:40Z
2 votes

不管是不是,都没有关系。 如果没有性能问题,请不要解决。

John Sonmez answered 2020-08-10T05:15:00Z
2 votes

正如约翰所说,只有在实际看到性能下降的情况下,才花更多时间在此上。

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

进一步了解剩余的奥秘。

dove answered 2020-08-10T05:15:28Z
2 votes

AppSettings已缓存。 您可以通过进一步缓存以限制namevaluecollection查找来提高性能。

请参阅:DotNetPerls静态配置模式

HAL9000 answered 2020-08-10T05:15:53Z
1 votes

试试吧,

ConfigurationManager.RefreshSection("appSettings")

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

普通文件名:appname.exe.config

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

Ali Osman Yavuz answered 2020-08-10T05:16:26Z
translate from https://stackoverflow.com:/questions/389361/configurationmanager-appsettings-caching