2008-12-23 38 views
35

Sabemos que IIS almacena en caché ConfigurationManager.AppSettings para que lea el disco solo una vez hasta que se cambie web.config. Esto se hace con fines de rendimiento.ConfigurationManager.AppSettings Caching

Alguien en:

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

declaró que .NET Framework no hacer lo mismo para app.config, pero se lee desde el disco para cada solicitud. Pero me resulta difícil de creer, porque sería más lento. Por favor, dígame que está equivocado o tendré que arreglar cada consola/Windows Forms/Windows Services que escribí.

Actualización Lamento haber malinterpretado lo que dijo la gente en el foro vinculado anteriormente.

Respuesta

40

Una prueba rápida parece mostrar que estas configuraciones solo se cargan al inicio de la aplicación.

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

Verá que todas las salidas son las mismas.

+15

Para ser quisquillosos, la configuración se carga la primera vez que se hace referencia a ellos, no necesariamente al inicio de la aplicación. –

+7

Para ser aún más quisquilloso (y fuera de tema para arrancar) - no es necesario llamar a ToString() - ya es una cadena –

+1

Solo necesitabas comprobar la clase System.Configuration.ConfigurationManager y verás que la clase y sus propiedades están estáticos – heymega

2

No importa si lo hace o no. No solucione un problema de rendimiento si no hay uno.

+41

Estoy algo en desacuerdo aquí. Es probable que los valores de configuración como este se utilicen en todo tipo de lugares en su aplicación, incluidos los bucles anidados y demás. Es importante saber si la lectura de un archivo de configuración tomará microsegundos frente a milisegundos. –

1

Como dice John, solo dedique más tiempo a esto si realmente está viendo un golpe de rendimiento.

También estoy bastante seguro de que estas aplicaciones tienen la configuración en la memoria , y para ver cualquier cambio dentro de una configuración de la aplicación tendría que ser reiniciado .

Para algunos further reading sobre los misterios restantes.

3

Lee el archivo de configuración de la aplicación (MyApp.exe.config) una vez al inicio de la aplicación, como se puede verificar fácilmente al cambiar el archivo mientras se ejecuta la aplicación.

El comentario en el post en el foro al que hace referencia el OP fue:

Los valores para el Web.config son almacenado en caché/memoria cuando se inicia la aplicación de ahí por qué los aplicación se reinicia cuando los cambios están hechos a the web.config. Tenga en cuenta que esto sólo se aplica a la Web.config, cualquier otro archivos .config que puede utilizar se accede desde el disco de forma predeterminada

yo interpretaría este comentario en el sentido de que los archivos de configuración que no sea web .config en una aplicación ASP.NET se accede desde el disco de forma predeterminada. Y de forma similar, se accede a los archivos de configuración que no sean MyApp.exe.config en una aplicación WinForms/Console desde el disco de forma predeterminada.

Este comentario no indica que MyApp.exe.config se lea del disco de forma predeterminada.

2

AppSettings se almacena en caché. Puede mejorar el rendimiento almacenando en caché aún más para limitar búsquedas de colecciones de valores de nombres.

Ver: DotNetPearls Static Config Pattern