Cuándo utilizar informes normales o almacenados en caché
Al planear la creación de una aplicación con el SDK de Crystal Reports, una de las consideraciones más importantes es si se van a utilizar informes normales o almacenados en caché. Conocer los aspectos fundamentales del SDK que afectan al almacenamiento en caché de informes le ayuda a elegir la mejor estructura del proyecto de Crystal Reports para Visual Studio.
¿Qué son informes almacenados en caché?
Los informes almacenados en caché son objetos de informe que se han almacenado en el objeto ASP.NET Cache para incrementar el rendimiento y la escalabilidad. Crystal Reports incluye un marco específico para colocar instancias de ReportDocument en Cache. Dicho marco almacena en caché automáticamente cualquier informe que implemente la interfaz ICachedReport.
¿Qué es un objeto ASP.NET Cache?
Tanto en ASP como en ASP.NET, los objetos de informe se colocan en los objetos Session o Application en el servidor Web, por dos razones:
- Para conservar el estado del objeto de informe siempre que se vuelve a cargar la página.
- Para mejorar la escalabilidad y el rendimiento mediante la colocación de informes largos o lentos de cargar en la memoria del servidor.
En ASP.NET, se introdujo una variación ampliada del objeto Application denominado Cache. Igual que ocurre con Application, Cache continúa conservando instancias únicas de un objeto de informe que se va a compartir con todos los usuarios. Sin embargo, Cache añade inteligencia que busca dependencias basadas en archivo, clave u hora. Estas dependencias pueden caducar automáticamente e incluso actualizar los objetos del informe dentro de Cache para mantener el contenido del objeto Cache actual.
Nota |
---|
Los términos "objeto Cache" y "Cache" se utilizan intercambiablemente, como ocurre con los términos "objeto Session" y "Session" u "objeto Application" y "Application," pero su significado es el mismo. El término "objeto" resalta el hecho de que se trata de objetos de persistencia que se ejecutan dentro del espacio de memoria de .NET Framework en el servidor Web. |
¿Cómo se colocan los objetos de informe en el objeto ASP.NET Cache?
Puede colocar los objetos de informe en el objeto ASP.NET Cache de dos formas:
- Asignar el objeto de informe a Cache con la misma sintaxis con la que se asigna un objeto de informe a Session o Application; es decir, asignación explícita.
- Crear una instancia de la versión del informe que implemente la interfaz ICachedReport. El motor del informe busca cualquier objeto que implemente esta interfaz y automáticamente coloca dicho objeto en Cache; es decir, asignación implícita.
¿Qué es la interfaz ICachedReport?
La interfaz ICachedReport marca las clases del informe que permiten que ICachedReport funcione con el marco de almacenamiento en caché de Crystal Reports. Este marco personalizado proporciona una capa sobre el objeto ASP.NET Cache, para satisfacer las necesidades específicas del almacenamiento en caché del informe.
La interfaz ICachedReport incluye firmas de método que, cuando se implementan en la clase del informe, indican al marco cómo almacenar en caché esa clase en particular.
¿Cuáles son las funciones de almacenamiento en caché de informes incluidas cuando se incrusta un informe en un proyecto de Visual Studio?
Al crear o importar un informe a un proyecto de Visual Studio, el informe se incrusta en el proyecto y se generan automáticamente dos clases:
- Una clase contenedora de informe, con el mismo nombre del informe.
Esta clase contenedora representa el informe del proyecto y hereda de ReportDocument. Para obtener más información, vea [Cuándo utilizar informes incrustados o no incrustados](ms225520\(v=vs.90\).md).
- Una clase de utilidad de administración de caché (denominada clase Cached[ReportName]).
Esta clase de utilidad de administración de caché se encarga del almacenamiento en caché de ese informe incrustado, mediante el uso del objeto ASP.NET Cache y del marco de almacenamiento en caché integrado en el SDK de Crystal Reports.
La siguiente tabla muestra los elementos que se generan al agregar el informe Hierarchical Grouping (se encuentra en el Directorio de informes de muestra) a un proyecto de Crystal Reports para Visual Studio:
¿Cómo se llama?
|
¿Qué es?
|
---|---|
Hierarchical Grouping.rpt
|
El informe
|
Clase Hierarchical_Grouping
|
La clase contenedora de informe
|
Clase CachedHierarchical_Grouping
|
La clase de utilidad de administración de caché se utiliza para administrar el almacenamiento en caché de la clase contenedora de informe
|
La clase contenedora de informe y la clase de utilidad de administración de caché tienen tareas distintas:
- La clase contenedora de informe hereda de ReportDocument y, por lo tanto, tiene acceso al modelo de objetos ReportDocument completo. Se trata de la clase básica en la que programa para interactuar con el informe.
- La clase de utilidad de administración de caché administra y almacena las instancias de la clase contenedora de informe en el objeto ASP.NET Cache. Reconoce instancias distintas de la clase contenedora de informe y evita que esas instancias se sobrescriban entre sí en Cache. Por ejemplo, reconoce diferencias creadas al cambiar parámetros e inicios de sesión. Para ello, asigna una clave única para cada instancia única de la clase contenedora de informe.
- Para identificarse respecto a la funcionalidad de almacenamiento en caché de Crystal Reports .NET Framework, la utilidad de administración de caché implementa la interfaz ICachedReport.
Tanto la clase contenedora de informe como la clase de utilidad de administración de caché se generan en el mismo archivo de clase. Para ver ambas clases, haga clic con el botón secundario en el archivo de clase de informe en el Explorador de soluciones y elija Ver código. Cuando se abre el archivo, puede encontrar el código de la clase contenedora de informe en la parte superior del mismo y el de la clase de utilidad de administración de caché hacia la mitad.
Nota |
---|
Para obtener información sobre cómo enlazar el control CrystalReportViewer a esta clase de utilidad de administración de caché, vea Enlazar a una clase de informe incrustado almacenado en caché. Para crear su propia clase de utilidad de administración de caché, vea Enlazar a un informe no incrustado cargado en una clase de utilidad de administración de caché. |
Cuándo se deben almacenar en caché los informes
Conserve sólo un porcentaje bajo de objetos de informe en el objeto ASP.NET Cache. La mayoría de los objetos de informe tienen una compartibilidad baja; es decir, no se utilizan como recursos compartidos con otros objetos. Por lo tanto, no utilizan Cache de forma económica. Su persistencia es necesaria. Por tanto, coloque los objetos de informe en el objeto Session del usuario.
Coloque el objeto de informe en ASP.NET Cache sólo cuando el informe sea de alta compartibilidad. Esto es particularmente importante si el objeto de informe es muy grande o si tiene una consulta que es tan compleja que se tardan varios minutos en recuperar los datos.