Я бы сказал, что это скорее проблема сопровождения кода, чем проблема производительности. Простой поиск по словарю AppSettings
не будет проблемой, если у вас нет кода, который пытается выполнить поиск по AppSettings
в цикле, который выполняется, скажем, сто раз. Конечно, такой код вызовет проблемы с производительностью. Но еще важнее то, что у вас будет ConfigurationManager.AppSettings["MyKey"]
по всей базе кода. Вы вводите волшебную строку. Если вам нужно изменить ключ в файле конфигурации, вам придется выполнить тщательный поиск и замену во всех ваших проектах. Более того, мы обычно принимаем некоторые решения, основываясь на значении, хранимом в appSettings. Это не всегда просто читать и использовать значение как есть. Иногда вы принимаете решение на основе стоимости. Например,
if (ConfigurationManager.AppSettings["DebugMode"] == "yes")
do this
else
do that
Возможно, вы повторяете эту логику в сотнях мест. Допустим, вам нужно добавить еще одно условие:
if (ConfigurationManager.AppSettings["DebugMode"] == "yes" || ConfigurationManager.AppSettings["InternetNotAvailable"] == "yes")
do this
else
do that
Это становится грязным. Ваш код начинает вонять.
Итак, я всегда рекомендую моей команде разработчиков никогда не использовать ConfigurationManager.AppSettings
где-либо в коде. Используйте некоторый статический класс, где вы читаете значения конфигурации, и все такие решения передаются в одну переменную. Например,
static class ConfigHelper
{
private readonly static bool ExternalWebserviceCallAllowed = ConfiguationManager.AppSettings["DevMode"] == "false" && ConfigurationManager.AppSettings["InternetAvailable"] == "true";
}
.
.
if (ConfigHelper.ExternalWebserviceCallAllowed)
do this
else
do that
Это не только лучший по производительности, но и легко поддерживаемый и расширяемый код.