2008-11-08 27 views
6

Leí en algún lugar de la documentación de Microsoft que el contenido de ASP.NET web.config está en la memoria caché. Si eso es cierto, donde está en caché - en la memoria o en el disco?ASP.NET: ¿Dónde/cómo se almacena en caché web.config?

Y una pregunta de seguimiento: ¿hay alguna consideraciones de rendimiento que tenga que hacer, si tengo que acceder al web.config intensivamente?

Respuesta

7

Almacenado en memoria caché en el disco no tiene ningún sentido, ya está en el disco.

En primer lugar, en ASP.NET desea asegurarse de acceder a las secciones de configuración a través del método GetSection del objeto HttpContext (esto utiliza las copias en caché administradas por ASP.NET).

El rendimiento del acceso a los valores de configuración es una función de la implementación interna del objeto Section (el objeto devuelto por GetSection). Un ConfigurationSection puede simplemente actuar como envoltorio para un nodo DOM que puede leer en cada solicitud de una propiedad. OTH podría almacenar internamente el valor en caché y observar los cambios.

Mi consejo sería mantener el código simple y simplemente acceder a los valores que necesita a través de GetSection en lugar de intentar mantener copias de los mismos en otro lugar, pero por todos los medios mantener una referencia al objeto devuelto por GetSection para la duración de una solicitud si Vas a buscar varios valores desde allí.

+0

En el disco podría estar en una forma serializada ... bien, está bien, es una tontería, lo sé. No pensé mientras escribía eso ... :-) – splattne

+0

Espera ... ¿estoy loco? Estoy viendo HttpContext.GetSection en el reflector RedGate, y parece que se llama ConfigurationManager.GetSection internamente, que no parece que almacena nada en caché. Por favor, avíseme si me he perdido algo. –

+0

@Dan: no especifica qué versión está viendo, la 2.0.0.0 recurre a 'ConfigurationManager', pero en este contexto usará' CachedPathData' para obtener la sección. La razón de esto es que puede haber muchos archivos 'web.config' involucrados (uno en cada carpeta en la ruta actual), el estado real de configuración que se presentará para una ruta se compone de todos ellos. – AnthonyWJones

1

Creo que el web.config se almacena en caché en la memoria (en instancias de objetos desde System.Web.Configuration). Estos se vuelven a cargar cuando se cambia el archivo .config (y, por lo tanto, vuelves a cargar tu aplicación web).

Golpear esos objetos es poco probable que le dé un cuello de botella de rendimiento. Pero si tiene que hacer el análisis sintáctico, etc., es posible que desee retener los objetos analizados.

[Extra] Buenas prácticas (al menos creo) es crear propiedades estáticas en su archivo global.asax.cs para sus aplicaciones. Puede instanciar esas propiedades en el método application_start y usarlas en su aplicación web. Esto le impide usar cadenas codificadas (claves de configuración) en todo su código.

1

Se almacena en caché en la memoria. El almacenamiento en memoria caché en el disco no tiene mucho sentido para algo a lo que se accede con frecuencia y ya está en un formato en el que puede convertirlo en una estructura de datos fácilmente almacenable. Mi consejo sería acceder libremente, ya que será tan rápido como cualquier esquema que se te ocurra para almacenarlo y probablemente más rápido.

-1

Mi consejo sería usarlo como cualquier otra variable por la sencilla razón de que los datos están en caché. Y si crea variables estáticas en global.asax, se está forzando a escribir más código. Independientemente de lo planificado que esté, es muy probable que agregue variables en la aplicación con frecuencia durante la etapa de desarrollo.

-1

Hay 2 tipos de almacenamiento en caché en ASP .NET.

  1. Aplicación Caché - memoria caché de objetos internos basados ​​en memorylimitation, plazos y otra dependencia

  2. resultados de página Caché - dictada caché de páginas en el servidor. Ambos están basados ​​en memoria; no disco

+0

No creo que haya entendido la pregunta original de OP ... –

5

En ASP.NET, los <appsettings> sección se almacena en caché en la memoria después del 1º acceso:

  • http://msdn.microsoft.com/en-us/library /aa478432.aspx
  • http://weblogs.asp.net/stevewellens/web-config-is-cached

ASP.NET reinicia la aplicación si hay actualizaciones en el archivo web.config.

Cuestiones relacionadas