La sérialisation transforme un objet en un flux d'octets afin qu'il puisse être déplacé hors d'un processus soit pour la persistance, soit pour être envoyé à un autre processus. Et la désérialisation est le processus inverse qui transforme un flux d'octets en un objet.
Et, contrairement à un cache autonome, un cache distribué doit sérialiser les objets afin de pouvoir les envoyer à différents ordinateurs du cluster de cache. Mais, le mécanisme de sérialisation fourni par .NET framework a deux problèmes majeurs :
1. Très lent: La sérialisation .NET utilise Reflection pour inspecter les informations de type lors de l'exécution. La réflexion est un processus extrêmement lent par rapport au code précompilé.
2. Très volumineux : La sérialisation .NET stocke le nom complet de la classe, la culture, les détails de l'assembly et les références à d'autres instances dans les variables membres et tout cela rend le flux d'octets sérialisé plusieurs fois la taille de l'objet d'origine.
Étant donné qu'un cache distribué est utilisé pour améliorer les performances et l'évolutivité de votre application, tout ce qui entrave cela devient très critique. De plus, la sérialisation .NET régulière est une surcharge de performances majeure dans un cache distribué, car des milliers d'objets doivent être sérialisés chaque seconde avant d'être envoyés au cache distribué pour le stockage en mémoire. Et, tout ralentissement ici devient un ralentissement pour le cache distribué.
L'autre problème est qu'un flux d'octets sérialisé volumineux consomme 2 à 3 fois plus d'espace et réduit la capacité de stockage globale d'un cache distribué. Un stockage en mémoire ne peut jamais être aussi grand qu'un stockage sur disque, ce qui en fait un problème encore plus sensible pour un cache distribué.
Pour surmonter les problèmes de sérialisation .NET, NCache a mis en place un Cadre de sérialisation compact. Dans ce cadre, NCache stocke des ID de type à deux octets au lieu de noms d'assembly/classe complets. Il réduit davantage le flux d'octets sérialisé en ne sérialisant que les valeurs de champ et en excluant leurs détails de type. Pour terminer, NCache Compact Serialization Framework évite l'utilisation de .NET Reflection en raison de sa surcharge en accédant directement aux champs et aux propriétés de l'objet d'instance.
Il y a deux façons d'utiliser NCache Sérialisation compacte dans votre application.
- Laisser nous NCache générer du code de sérialisation compact au moment de l'exécution
- Implémentez vous-même une interface ICompactSerializable
Dans ce blog, je m'en tiendrai à la première approche uniquement. Je discuterai de la deuxième approche dans un blog séparé.
Laisser nous NCache générer du code de sérialisation compact au moment de l'exécution
Identifiez les types d'objets que vous mettez en cache et enregistrez-les avec NCache en tant que types de sérialisation compacts, comme illustré à la figure. C'est tout ce que vous avez à faire, et NCache s'occupe du reste.
Figure 1 : Types de registre pour la sérialisation compacte avec NCache
NCache envoie les types enregistrés à NCache client au moment de l'initialisation. Basé sur les types reçus, NCache client génère le code d'exécution pour sérialiser et désérialiser chaque type. Le code d'exécution n'est généré qu'une seule fois par le NCache client au moment de l'initialisation et utilisé encore et encore. Il s'exécute beaucoup plus rapidement que la sérialisation basée sur la réflexion.
Par conséquent, en utilisant NCache La sérialisation compacte vous permet d'utiliser efficacement votre mémoire cache distribuée et d'améliorer les performances de votre application.
Alors, téléchargez une version d'essai complète de 60 jours de NCache Enterprise et essayez-le par vous-même.
Bonjour,
Nous comprenons que vous avez mis en place 2 options ci-dessus. Quand utiliseriez-vous la sérialisation compacte via IDE par rapport à la mise en œuvre de l'interface.
-Javé