Yo diría que es más un problema de mantenimiento del código que un problema de rendimiento. Una simple búsqueda de diccionario en AppSettings
no va a ser un problema a menos que tenga un código que intente realizar la búsqueda en AppSettings
en un bucle que se ejecute, por ejemplo, cien veces. Seguramente tal código causará un problema de rendimiento. Pero aún más importante es que tendrá ConfigurationManager.AppSettings["MyKey"]
en toda la base de código. Estás presentando una cadena mágica. Si tiene que cambiar la clave en su archivo de configuración, tendrá que hacer una búsqueda exhaustiva y reemplazarla en todos sus proyectos. Además, generalmente tomamos una decisión basada en el valor almacenado en appSettings. No siempre se lee de forma clara y se usa el valor tal como está. A veces tomas decisiones basadas en el valor. Por ejemplo,
if (ConfigurationManager.AppSettings["DebugMode"] == "yes")
do this
else
do that
Puede estar repitiendo esta lógica en cientos de lugares. Ahora supongamos que necesita agregar otra condición allí:
if (ConfigurationManager.AppSettings["DebugMode"] == "yes" || ConfigurationManager.AppSettings["InternetNotAvailable"] == "yes")
do this
else
do that
Esto se complica. Tu código comienza a apestar.
Por lo tanto, siempre recomiendo a mi equipo de desarrollo que nunca use ConfigurationManager.AppSettings
en ningún lugar del código. Use alguna clase estática donde lea los valores de configuración y todas esas decisiones se guardarán en una sola variable. Por ejemplo,
static class ConfigHelper
{
private readonly static bool ExternalWebserviceCallAllowed = ConfiguationManager.AppSettings["DevMode"] == "false" && ConfigurationManager.AppSettings["InternetAvailable"] == "true";
}
.
.
if (ConfigHelper.ExternalWebserviceCallAllowed)
do this
else
do that
Esto no solo mejora el rendimiento, sino que también ofrece un código altamente mantenible y extensible.
Personalmente utilizo ConfigurationManager y no tengo problemas con él y me resulta muy sencillo cambiar la configuración sin tener que volver a compilar el problema. A menos que pueda obtener otra forma de memoria persistente para guardar su configuración, entonces el acceso a archivos a través del ConfigurationManager me parece lo mejor. –