2009-02-20 14 views
6

He creado un control de usuario en mi aplicación "header.ascx", estoy pasando 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.¿Guardar en caché un control de usuario en ASP.NET?

Quiero guardar este control en caché, cuando el valor del atributo selectedMenu cambia, ¿solo se refresca el caché, de lo contrario, debería tomar el control del caché?

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

Respuesta

5

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

+0

lol +1 for google! Podrías haber agregado este enlace a una buena pregunta sobre esto stackoverflow http://stackoverflow.com/questions/568837/caching-a-user-control-in-asp-net – Matt

6

El almacenamiento en caché de control de usuario en ASP.NET se llama fragment caching. Se realiza mediante la adición de una directiva OutputCache a la parte superior de la página:

no puede activar la caché mediante el establecimiento de la propiedad en el control, porque el control no se crea realmente si se encuentra en la 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 salida. Puede poner cualquier cadena que desee como parámetro y luego, cuando se evalúe el almacenamiento en caché, se llamará al GetVaryByCustomString() method from Global.asxa y puede establecer la lógica de si el control debe estar en caché o no.

+0

@Helephant, en este caso sospecho que probablemente podrían use VaryByControl. – LukeH

+0

Sí, sería VaryByControl. – Cerebrus

1

no creo que es una buena idea para almacenar en caché el control de sí mismo:

  • Cuando se crea el control de la primera vez, tiene referencias a su página padre 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á utilizando 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: ¿Es este control un cuello de botella? ¿Realmente necesitas el caché?

+1

cahcing usercontrols es de alguna manera una buena idea, ya que guarda el tiempo de renderizado '(optimización del rendimiento)' del control. por supuesto, cuando se almacena en caché, obtendrá una referencia nula en la página a menos que y hasta que caduque. –

+0

@Zain, creo que nos estamos refiriendo a cosas diferentes. El almacenamiento en caché del control en sí no ahorrará el tiempo de renderizado como usted sugiere, sin embargo, el almacenamiento en caché de la salida sí lo hará. –

0

Para resumir

usando VaryByCustom, significa

1- generar el control de nuevo.
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 en caché para no desperdiciar memoria, y la aplicación necesitará acceder a propiedades de control (mientras está almacenada en caché "o nulo")

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

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

De lo contrario no lo hacen

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.

¿están de acuerdo?

Gracias por su tiempo

Cuestiones relacionadas