La serialización transforma un objeto en un flujo de bytes para que pueda ser sacado de un proceso ya sea por persistencia o para ser enviado a otro proceso. Y la deserialización es el proceso inverso que transforma un flujo de bytes nuevamente en un objeto.
Y, a diferencia de un caché independiente, un caché distribuido debe serializar objetos para poder enviarlos a diferentes computadoras en el clúster de caché. Pero, el mecanismo de serialización provisto por .NET framework tiene dos grandes problemas:
1. Muy lento: La serialización de .NET usa Reflection para inspeccionar la información de tipo en tiempo de ejecución. La reflexión es un proceso extremadamente lento en comparación con el código precompilado.
2. muy voluminoso: La serialización de .NET almacena el nombre completo de la clase, la referencia cultural, los detalles del ensamblado y las referencias a otras instancias en las variables miembro y todo esto hace que el flujo de bytes serializado sea mucho más grande que el objeto original en tamaño.
Dado que se utiliza un caché distribuido para mejorar el rendimiento y la escalabilidad de su aplicación, cualquier cosa que obstaculice esto se vuelve muy crítico. Y, la serialización .NET normal es una sobrecarga de rendimiento importante en una memoria caché distribuida porque miles de objetos deben serializarse cada segundo antes de enviarse a la memoria caché distribuida para el almacenamiento en memoria. Y, cualquier ralentización aquí se convierte en una ralentización para el caché distribuido.
El otro problema es que un flujo de bytes serializado voluminoso consume 2 o 3 veces más espacio y reduce la capacidad de almacenamiento general de una memoria caché distribuida. Un almacenamiento en memoria nunca puede ser tan grande como un almacenamiento en disco, lo que hace que este sea un problema aún más delicado para un caché distribuido.
Para superar los problemas de serialización de .NET, NCache ha implementado un Marco de serialización compacto. En este marco, NCache almacena identificadores de tipo de dos bytes en lugar de nombres de ensamblado/clase totalmente calificados. Reduce aún más el flujo de bytes serializado serializando solo los valores de campo y excluyendo los detalles de su tipo. Por fin, NCache Compact Serialization Framework evita el uso de .NET Reflection debido a su sobrecarga al acceder directamente a los campos y propiedades del objeto de la instancia.
Hay dos formas de utilizar NCache Serialización compacta en su aplicación.
- Asegúrate de que NCache generar código de serialización compacta en tiempo de ejecución
- Implemente una interfaz ICompactSerializable usted mismo
En este blog, me limitaré únicamente al primer enfoque. Discutiré el segundo enfoque en un blog separado.
Asegúrate de que NCache generar código de serialización compacta en tiempo de ejecución
Identifique los tipos de objetos que está almacenando en caché y regístrelos con NCache como tipos de serialización compacta como se muestra en la figura. Eso es todo lo que tienes que hacer, y NCache se encarga del resto.
Figura 1: Tipos de registro para serialización compacta con NCache
NCache envía los tipos registrados a NCache cliente en el momento de la inicialización. Según los tipos recibidos, NCache El cliente genera el código de tiempo de ejecución para serializar y deserializar cada tipo. El código de tiempo de ejecución se genera sólo una vez por el NCache cliente en el momento de la inicialización y se utiliza una y otra vez. Se ejecuta mucho más rápido que la serialización basada en Reflection.
Por lo tanto, usando NCache Serialización compacta puede utilizar de manera eficiente su memoria caché distribuida y puede aumentar el rendimiento de su aplicación.
Por lo tanto, descargue una versión de prueba de 60 días totalmente funcional de NCache Enterprise y pruébalo por ti mismo.
Hola,
Entendemos que ha reunido las 2 opciones anteriores. ¿Cuándo usaría la serialización compacta a través de IDE frente a la implementación de la interfaz?
-Javed