web-dev-qa-db-ja.com

ConfigurationManager.AppSettingsキャッシング

IISはConfigurationManager.AppSettingsをキャッシュするため、web.configが変更されるまで、ディスクを1回だけ読み取ります。これはパフォーマンスの目的で行われます。

誰か:

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

.NET Frameworkはapp.configに対して同じことをしませんが、リクエストごとにディスクから読み取ります。しかし、私は信じがたいと思います。なぜなら、それは遅くなるからです。彼が間違っているか、私が書いたすべてのコンソール/ Windowsフォーム/ Windowsサービスを修正する必要があることを教えてください。

更新上記のリンクされたフォーラムで人々が言っ​​たことを誤解したことを残念に思います。

43
Jader Dias

簡単なテストでは、これらの設定はアプリケーションの起動時にのみロードされることが示されているようです。

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

すべての出力が同じままであることがわかります。

49
ZombieSheep

アプリケーションの起動時にアプリケーション構成ファイル(MyApp.exe.config)を1回読み取ります。これは、アプリの実行中にファイルを変更することで簡単に確認できます。

OPが参照したフォーラム投稿のコメントは次のとおりです。

Web.configの値は、アプリケーションの起動時にキャッシュ/メモリに保存されるため、web.configに変更が加えられたときにアプリが再起動するのはなぜですか。これはWeb.configにのみ適用されることに注意してください使用する可能性のある他の.configファイルはデフォルトでディスクからアクセスされます

このコメントは、web.config以外の構成ファイルASP.NETアプリケーション内がデフォルトでディスクからアクセスされることを意味すると解釈します。同様に、WinForms/ConsoleアプリケーションのMyApp.exe.config以外の構成ファイルには、デフォルトでディスクからアクセスします。

このコメントは、MyApp.exe.configがデフォルトでディスクから読み取られることを示していません。

3
Joe

ジョンが言うように、実際にパフォーマンスの低下が見られる場合にのみ、これにより多くの時間を費やしてください。

また、これらのアプリケーションはメモリ内の構成を保持していると確信しています。構成内の変更を確認するには、アプリケーションを再起動にする必要があります。

いくつかの さらに読む 残りの謎について。

2
dove

それを試してみてください、

ConfigurationManager.RefreshSection("appSettings")

ファイル名に注意してください(binフォルダー内

通常のファイル名:appname .exe.config

デバッグモードの場合:appname .vshost.exe.Config

2
Ali Osman Yavuz

AppSettingsがキャッシュされます。さらにキャッシュしてnamevaluecollectionルックアップを制限することにより、パフォーマンスを向上させることができます。

参照: DotNetPearls静的構成パターン

2
HAL9000

そうかどうかは関係ありません。パフォーマンスの問題がない場合は修正しないでください。

2
John Sonmez