ConfigurationManager.AppSettings Кэширование - PullRequest
41 голосов
/ 23 декабря 2008

Мы знаем, что IIS кэширует ConfigurationManager.AppSettings, поэтому он читает диск только один раз, пока не будет изменен файл web.config. Это сделано для повышения производительности.

Кто-то по адресу:

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

заявил, что .NET Framework не делает то же самое для app.config, но читает с диска для каждого запроса. Но мне трудно в это поверить, потому что это будет медленнее. Пожалуйста, скажите мне, что он не прав, или мне придется исправить все Консоли / Windows Forms / Windows Services, которые я написал.

Обновление Я сожалею, что неправильно истолковал то, что люди говорили на связанном форуме выше.

Ответы [ 6 ]

46 голосов
/ 23 декабря 2008

Быстрый тест показывает, что эти настройки загружаются только при запуске приложения.

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

Вы увидите, что все выходы остаются одинаковыми.

3 голосов
/ 23 декабря 2008

Считывает файл конфигурации приложения (MyApp.exe.config) один раз при запуске приложения, что легко можно проверить, изменив файл во время работы приложения.

Комментарий в сообщении на форуме, на который ссылается ФП, был:

Значения для Web.config: хранится в кеше / памяти, когда приложение начинается, следовательно, почему приложение перезапускается при внесении каких-либо изменений в web.config. Обратите внимание, что это только относится к Web.config, любой другой Доступ к файлам .config, которые вы можете использовать с диска по умолчанию

Я бы интерпретировал этот комментарий как означающий, что файлы конфигурации, отличные от web.config в приложении ASP.NET , доступны с диска по умолчанию. Аналогично, файлы конфигурации, отличные от MyApp.exe.config в приложении WinForms / Console, доступны с диска по умолчанию.

В этом комментарии не указывается, что MyApp.exe.config по умолчанию считывается с диска.

2 голосов
/ 23 января 2010

AppSettings кэшируется. Вы можете улучшить производительность путем дальнейшего кэширования, чтобы ограничить поиск имен по значению.

См .: Шаблон статической конфигурации DotNetPearls

1 голос
/ 21 июня 2018

Попробуй,

ConfigurationManager.RefreshSection("appSettings")

Просто будьте осторожны с именем файла ( в папке bin )

Обычное имя файла: имя приложения. exe.config

если режим отладки: имя приложения. vshost.exe.Config

1 голос
/ 23 декабря 2008

Как говорит Джон, тратьте на это больше времени, только если вы действительно видите снижение производительности.

Также я почти уверен, что эти приложения хранят конфигурацию в памяти , и чтобы увидеть любые изменения в конфигурации, приложение должно быть перезапущено .

Для некоторых дальнейшего чтения об оставшихся тайнах.

1 голос
/ 23 декабря 2008

Неважно, если это так или нет. Не устраняйте проблему с производительностью, если ее нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...