Compartir a través de


Cache y persistencia del modelo de objetos ReportDocument

Cache es un enfoque basado en servidor de ASP.NET para conservar el estado. Cache es funcionalmente parecido al objeto Application que se encuentra tanto en ASP como en ASP.NET:

  • Application permite conservar cualquier objeto en el ámbito de la aplicación.
  • Todos los usuarios pueden disponer de los objetos colocados en Application. Pero Application, siendo general para toda la aplicación, no está diseñado para conservar la información específica del usuario.

Cache comparte todas estas funciones con Application, pero agrega nuevos niveles de inteligencia para la administración de datos transitorios:

  • Un objeto agregado a la caché se puede configurar con dependencias basadas en archivo, clave u hora. Si cambia el archivo o la clave asociados, o si transcurre un período de tiempo determinado, el objeto se quita automáticamente de la caché y se coloca una versión actualizada, la siguiente vez que se requiera el objeto.
  • Un objeto agregado a la caché sin dependencias y de poco uso caduca automáticamente.
  • Cuando se quita un objeto de la caché, se activa un evento. Puede escribir código que se ejecute en ese evento y que cargue una versión actualizada del objeto en Cache.

Si se agrega una versión alternativa de un objeto mediante la cadena de clave original, se sobrescribe la versión anterior. Para evitarlo, concatene la definición alternativa a la cadena de clave para que cada versión alternativa del objeto sea única.

La ventaja de Cache respecto a Application es que, como Application, almacena información a la que tienen acceso todos los usuarios, pero Cache también se puede actualizar a sí mismo basándose en los cambios de sus dependencias.

Limitaciones del enfoque de persistencia

Los programadores que no conocen Cache pueden sentirse tentados y utilizarlo en todas partes por su persistencia, reemplazando Session por Cache. Sin embargo, Cache no está diseñado para reemplazar la funcionalidad del objeto Session. Los intentos por emular la exclusividad de Session concatenando datos específicos del usuario a la clave de Cache cargan Cache con objetos de usuario que, a diferencia de lo que ocurre con Session, no caducan tras agotarse el tiempo de espera del usuario. Como resultado, Cache termina por solicitar más memoria del servidor Web de lo que lo hizo el objeto Session.

Si debe conservar datos específicos del usuario, siga utilizando el objeto Session.

Para obtener enfoques alternativos de persistencia, vea:

Conservar el modelo de objetos ReportDocument con Cache

Si se ha encapsulado el informe en el modelo de objetos ReportDocument, este modelo de objetos se debe conservar mediante un enfoque basado en servidor como Session o Cache.

Puede conservar un informe en el modelo de objetos ReportDocument utilizando Cache de una estas dos formas:

  • Cree una instancia del informe y, a continuación, asígnela al objeto Cache, mediante la misma sintaxis utilizada para asignar un informe al objeto Session.
Este método sólo funciona en informes con un nivel de compartibilidad alto, en los que la instancia de ReportDocument se produce exactamente una vez, mediante un solo conjunto de credenciales de conexión y de parámetros. En el caso de una instancia de ReportDocument que se puede producir varias veces debido a las variaciones de la información de parámetros y conexión, si se vuelve a asignar al objeto Cache con la misma cadena de clave, se sobrescribe la versión anterior de la instancia de ReportDocument. Para obtener información sobre almacenamiento en caché con compartibilidad alta, vea [Almacenar en caché informes con "alta compartibilidad"](ms225489\(v=vs.90\).md).
  • Crear una instancia de la versión de la clase del informe que implementa la interfaz ICachedReport.
El SDK de Crystal Reports incluye un marco de almacenamiento en caché integrado para informes. Todos los informes que implementen la interfaz ICachedReport se agregan automáticamente a la caché con una clave única basada en los parámetros y las credenciales de conexión del usuario. Este método funciona con los informes que tienen una compartibilidad alta, pero que pueden tener pocas versiones debido a variaciones mínimas en los parámetros y las credenciales de conexión. Si tiene informes con una compartibilidad baja (que son específicos del usuario), asígnelos al objeto Session.

Para conservar un informe incrustado que implemente ICachedReport

  1. Agregue el informe al proyecto.
Se crea una clase de informe incrustado. También se crea una clase de informe almacenado en caché que carga y devuelve una instancia almacenada en caché de la clase de informe incrustado.
  1. Cree una instancia de la clase de informe almacenado en caché.

  2. Asigne la instancia de la clase almacenada en caché al control CrystalReportViewer.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Para obtener un ejemplo detallado de este procedimiento, vea <a href="ms227391(v=vs.90).md">Enlazar a una clase de informe incrustado almacenado en caché</a>.</p></td>
</tr>
</tbody>
</table>

Para conservar un informe no incrustado mediante una clase de utilidad que implemente ICachedReport

  1. Cree su propia clase de utilidad de almacenamiento de caché y establezca su valor en implementar ICachedReport.

  2. En esta clase de utilidad, cargue el informe no incrustado desde una cadena de ruta mediante el método ReportDocument.Load().

  3. Codifique el método de implementación CreateReport() para que devuelva la instancia de ReportDocument del informe no incrustado.

  4. Cree una instancia de la clase de utilidad de administración de almacenamiento de caché del informe.

  5. Asigne esa instancia de la clase al control CrystalReportViewer.

    Nota

    Para obtener un ejemplo detallado de este procedimiento, vea Enlazar a un informe no incrustado cargado en una clase de utilidad de administración de caché.

Limitaciones de persistencia del modelo de objetos ReportDocument con Session

Cache es el mejor enfoque de uso cuando los usuarios conservan instancias de ReportDocument con un alto grado de compartibilidad. Si el informe es específico del usuario, Cache desperdiciará la memoria del servidor al crear instancias basadas en usuario en el nivel de aplicación que estarán en el servidor después de que caduque el tiempo del usuario. Los informes específicos del usuario se deben asignar a Session.

Nota

En la mayoría de los casos, utilice Session para conservar instancias de ReportDocument. Utilice Cache (o más específicamente, la interfaz ICachedReport) sólo cuando un informe tenga una compartibilidad alta y sea largo, o tan complejo que tarde varios minutos en recuperar sus datos.

Diferencias entre Cache y ViewState

Cache se ocupa principalmente de la persistencia del estado de los objetos de la clase de código subyacente. ViewState lo hace del estado de los controles de la página Web. Cuando un control de la página Web está enlazado a un objeto de la clase de código subyacente y ambos necesitan conservarse en las recargas de páginas, Cache y ViewState comparten las funciones de persistencia.

En este caso, ViewState conserva un control CrystalReportViewer y Cache, objeto ReportDocument que está enlazado al control.

Vea también