Кэширование ConfigurationManager.AppSettings

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

Кто-то в:

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

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

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


person Jader Dias    schedule 23.12.2008    source источник


Ответы (6)


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

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

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

person ZombieSheep    schedule 23.12.2008
comment
Просто чтобы быть придирчивым, настройки загружаются при первом обращении к ним, а не обязательно при запуске приложения. - person Samuel Neff; 23.01.2010
comment
Чтобы быть еще более разборчивым (и не по теме) - не нужно вызывать ToString() - это уже строка - person Oskar Austegard; 10.03.2012
comment
Вам просто нужно было проверить класс System.Configuration.ConfigurationManager, и вы увидите, что класс и его свойства являются статическими. - person heymega; 25.02.2014
comment
Вам нужно будет позвонить ConfigurationManager.RefreshSection("appSettings"), чтобы получить изменения. Вы также можете добавить средство просмотра файлов, чтобы перезагружать его только при изменении. - person Luis Perez; 21.07.2015
comment
Тогда зачем обращаться к чему-либо, кроме статического конструктора? (при условии, что часы не добавлены) Также -- @SamuelNeff Все ли настройки считываются при первой ссылке, или вы говорите, что разные настройки считываются из одного и того же файла в разное время? Если последнее, то я начинаю задумываться о наших друзьях в Редмонде. - person ruffin; 12.09.2020

Попробуй,

ConfigurationManager.RefreshSection("appSettings")

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

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

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

person Ali Osman Yavuz    schedule 21.06.2018

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

person John Sonmez    schedule 23.12.2008
comment
тут я несколько не согласен. Такие значения конфигурации, скорее всего, будут использоваться в самых разных местах вашего приложения, включая вложенные циклы и тому подобное. Важно знать, будет ли чтение файла конфигурации занимать микросекунды или миллисекунды. - person Dave Markle; 24.12.2008

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

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

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

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

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

person Joe    schedule 23.12.2008

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

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

person HAL9000    schedule 22.01.2010

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

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

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

person dove    schedule 23.12.2008