Asp.net ConfigurationManager.AppSettings缓存

Asp.net ConfigurationManager.AppSettings缓存,asp.net,.net,performance,caching,configurationmanager,Asp.net,.net,Performance,Caching,Configurationmanager,我们知道IIS缓存ConfigurationManager.AppSettings,因此它只读取磁盘一次,直到更改web.config。这样做是为了提高性能 某人在: 声明.NET Framework不会对app.config执行相同的操作,但它会从磁盘读取每个请求。但我觉得很难相信,因为这样会更慢。请告诉我他错了,否则我将不得不修复我编写的每个控制台/Windows窗体/Windows服务 更新我很遗憾我误解了上面链接论坛中人们所说的话。不管是不是。如果没有性能问题,请不要修复 快速测试似乎

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

某人在:

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


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

不管是不是。如果没有性能问题,请不要修复

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

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

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

正如John所说,只有当您实际看到性能受到影响时,才需要在这方面花费更多时间

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


了解一些剩余的奥秘。

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

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

Web.config的值为 当 应用程序启动,因此为什么要启动应用程序 对进行任何更改时重新启动 web.config。请注意,这只是 适用于Web.config,任何其他 可以访问您可能使用的.config文件 默认情况下,从磁盘

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


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

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

请参阅:

试试看

ConfigurationManager.RefreshSection(“应用设置”)

只需注意文件名(在bin文件夹中

普通文件名:appname.exe.config


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

我在这里有点不同意。像这样的配置值可能会在应用程序中的所有位置使用,包括嵌套循环等。了解配置文件的读取时间是微秒还是毫秒是很重要的。只是为了挑剔,设置在第一次被引用时就被加载,而不一定是在应用程序启动时。为了更挑剔(并且在启动时脱离主题)-无需调用ToString()-它已经是一个字符串,您只需检查System.Configuration.ConfigurationManager类,就会看到该类及其属性是静态的。您必须调用
ConfigurationManager.RefreshSection(“appSettings”)
,才能获得更改。您还可以添加一个文件监视程序,以便仅在文件发生更改时重新加载它。那么,除了静态构造函数之外,为什么还要访问其他任何东西呢?(假设没有添加手表)另外--@SamuelNeff是在第一次引用时读取所有设置,还是说在不同的时间从同一文件读取不同的设置?如果是后者,我开始怀疑我们在雷德蒙的朋友。