2011-12-29 9 views
6

He intentado leer Caché en ASP.NET y todavía tengo algunas preguntas.¿El almacenamiento en caché en C# es el enfoque correcto para mí?

  1. Cuando se utiliza un SQL caché de Dependencia ... Sé que se puede especificar qué tablas serán supervisados ​​pero si ocurre un cambio en cualquiera de esas mesas lo hace restablecer toda la memoria caché? Entiendo que no quiero almacenar en la memoria caché las tablas que tendrán cambios frecuentes, pero podríamos terminar con un buen puñado de tablas en la memoria caché e incluso si cada tabla solo recibe algunas actualizaciones al día, eso podría convertirse en reinicios de la memoria caché de 50 años. diariamente (ventana de 8 horas).

  2. Estaría creando y manteniendo este caché a través de una DLL GAC. Un gran número de aplicaciones diferentes accederían a ese GAC en cualquier momento. ¿Cada aplicación mantiene su propia copia del caché o solo se almacena en una ubicación global (o posiblemente por grupo de aplicaciones)?

  3. ¿Hay una ubicación física en el servidor donde pueda ver cuánto espacio consume actualmente el caché? Esto sería extremadamente pertinente si cada aplicación mantiene su propio Caché, ya que podría llevar grandes cantidades de espacio en el disco.

  4. ¿Hay alguna manera de forzar físicamente la caché para que se reconstruya? Pude ver a mi jefe asumiendo que el caché tenía la culpa de un problema en particular y que debería ser capaz de descartarlo en el nivel más radical. No "cambiar un registro y diciendo que debería reconstruir el caché", sino "hacer [Acción X] y sabiendo que todo lo que estaba en la caché se ha ido"

Gracias de antemano por sus respuestas y tiempo.

+0

Usted plantea problemas interesantes, pero no estoy muy seguro de cómo se relaciona con el título de su pregunta. –

+0

y la etiqueta C# .. –

+0

2 me asusta ... – Phill

Respuesta

2
  1. SqlCacheDependency sólo supervisa las tablas en el enfoque de estilo antiguo SQL 2000, que se basa en factores desencadenantes y de votación. El método SQL 2005+ supervisa los cambios en el nivel de fila y utiliza Service Broker. En el nivel del objeto Cache, los cambios invalidarán solo las entradas de caché asociadas con la SqlCacheDependency (no toda la caché).

  2. Cada aplicación tiene una copia separada de la memoria caché. Si tiene muchas aplicaciones que comparten los mismos datos, puede considerar la creación de un "servidor de almacenamiento en caché" separado y que sus aplicaciones obtengan sus datos desde allí, utilizando WCF, básicamente, agregue otro nivel a su aplicación.

  3. Puede mirar un par de contadores de rendimiento relacionados con la caché, pero si su preocupación es el espacio en disco, entonces no hay nada de qué preocuparse, ya que la memoria caché de ASP.NET se almacena por completo en la RAM. Además, si la RAM se llena demasiado, una característica de la memoria caché es que soltará los objetos a los que se hace referencia con anterioridad o con poca frecuencia para dejar espacio para nuevos objetos.

  4. La forma más fácil de forzar la caché es simplemente reciclar su aplicación o AppPool (lo que sucede una vez al día por defecto de todos modos).Si desea algo más específico, deberá escribir algún código para eliminar por la fuerza ciertos elementos del caché, ya sea utilizando Cache.Remove() o utilizando dependencias vinculadas.

1

desde la parte superior de mi cabeza:

  1. Sólo se invalidarán el contenido de esa tabla.
  2. Cada aplicación web tiene su propio caché.
  3. La memoria caché se almacena en la memoria. y ver a esta pregunta How to determine total size of ASP.Net cache? en el tamaño de caché
  4. http://bit.ly/vsqNDl esto puede ayudar a
+0

Si la tabla tiene claves foráneas, ¿no invalidaría también las memorias caché para esas tablas? No he trabajado con las dependencias de caché de Sql, por lo que tengo curiosidad y, si no lo hago, puedo ver algunos usos para nuevos proyectos. – Brian

Cuestiones relacionadas