c# asp.net caching user-controls asp.net-2.0

c# - ¿Guardar en caché un control de usuario en ASP.NET?



caching user-controls (4)

¡Por supuesto que puede! Se llama "Caché de Fragmentos". Aquí hay un enlace a la página Quickstarts y la base de MS Knowledge . Además, Google .

He creado un control de usuario en mi aplicación "header.ascx", estoy pagando un atributo de menú seleccionado a este control en el que el control selecciona el valor de menú seleccionado especificado. Supongamos que he pasado el valor "inicio" o "búsqueda", luego seleccionará (lo resaltará) el menú de búsqueda.

Quiero guardar en caché este control. Cuando el valor del atributo selectedMenu cambia, solo se actualiza el caché; de lo contrario, debe tomar el control del caché.

¿Es posible almacenar en caché un control de usuario en asp.net? Estoy usando ASP.NET 2.0 (C #)


El caché de control de usuario en ASP.NET se llama almacenamiento en memoria caché de fragmentos . Se hace agregando una directiva OutputCache a la parte superior de su página:

No puede variar la memoria caché estableciendo la propiedad en el control porque el control no se crea realmente si se encuentra en la memoria caché. Si intenta acceder al control en el código que está en caché, será nulo.

¿La condición que determina si el control debe almacenarse en caché o no es algo que puede determinar mirando la solicitud actual? Si es así, puede usar el atributo varybycustom ( http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx ) de la directiva de caché de resultados. Puede colocar cualquier cadena que desee como parámetro y luego, cuando se evalúe el almacenamiento en caché, se llamará al método GetVaryByCustomString () de Global.asxa y podrá establecer la lógica para saber si el control debe almacenarse en caché o no.


No creo que sea una buena idea guardar en caché el control en sí mismo:

  • Cuando se crea el control por primera vez, tiene referencias a su página principal, entre otros.
  • Cuando recupera el control de la memoria caché, esas referencias ya no existen.

Un mejor enfoque, creo, es almacenar en caché los datos que el control está usando en su lugar. ASP.NET crea tantos controles durante el ciclo de vida de la página, que el almacenamiento en caché de este control realmente no mejora nada.

Luego, una pregunta estúpida al final: ¿este control es un cuello de botella? ¿Realmente necesitas el caché?


Para resumir

usando VaryByCustom, significa

1- Construye el control nuevamente.
2- Tener múltiples versiones del control en la memoria caché. que se usará cuando se cumplan las condiciones personalizadas .

Esto solo es bueno si el control tarda mucho tiempo en compilarse y tenemos un número finito de versiones almacenadas en caché para no desperdiciar memoria, y la aplicación necesitará acceder a las propiedades de control (mientras está en caché "o nulo").

pero no será bueno si esas condiciones personalizadas dependen de las propiedades de control en sí. No puedo acceder, es nulo.

por ejemplo, quiero escribir algo como if (el valor seleccionado por defecto en la lista de países NO es EE. UU.) luego reconstruir y Caché (darle una cadena diferente)

De lo contrario, no

mientras que otros objetos intentan acceder a la lista de países, verificará nulo y establecerá la lista desplegable de países en EE. UU.

El cahing de datos hará el trabajo. Es la única forma.

¿Quién está de acuerdo?

Gracias por su tiempo