45

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

某人在:

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

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

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

4

6 回答 6

50

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

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

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

于 2008-12-23T16:43:02.900 回答
4

尝试一下,

ConfigurationManager.RefreshSection("appSettings")

请注意文件名(在 bin 文件夹中

普通文件名:appname. exe.config

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

于 2018-06-21T07:58:03.837 回答
3

做与不做都没关系。如果没有,请不要修复性能问题。

于 2008-12-23T16:36:48.793 回答
3

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

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

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

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

此评论并未说明默认情况下从磁盘读取 MyApp.exe.config。

于 2008-12-23T16:45:10.540 回答
2

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

请参阅: DotNetPearls 静态配置模式

于 2010-01-22T22:46:56.527 回答
1

正如约翰所说,只有在您真正看到性能受到影响时才花更多时间在这上面。

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

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

于 2008-12-23T16:44:58.810 回答