Durch die Serialisierung wird ein Objekt in einen Bytestrom umgewandelt, sodass es entweder zur Persistenz oder zum Senden an einen anderen Prozess aus einem Prozess verschoben werden kann. Und Deserialisierung ist der umgekehrte Prozess, der einen Bytestrom zurück in ein Objekt umwandelt.
Und im Gegensatz zu einem eigenständigen Cache muss ein verteilter Cache Objekte serialisieren, damit er sie an verschiedene Computer im Cache-Cluster senden kann. Aber der Serialisierungsmechanismus von .NET framework hat zwei große Probleme:
1. Sehr langsam: Die .NET-Serialisierung verwendet Reflection, um Typinformationen zur Laufzeit zu überprüfen. Im Vergleich zu vorkompiliertem Code ist die Reflexion ein extrem langsamer Prozess.
2. Sehr sperrig: Die .NET-Serialisierung speichert den vollständigen Klassennamen, die Kultur, Assemblydetails und Verweise auf andere Instanzen in Mitgliedsvariablen. Dadurch wird der serialisierte Bytestrom um ein Vielfaches größer als das ursprüngliche Objekt.
Da ein verteilter Cache zur Verbesserung der Leistung und Skalierbarkeit Ihrer Anwendung verwendet wird, wird alles, was dies behindert, sehr kritisch. Und die reguläre .NET-Serialisierung stellt einen großen Leistungsaufwand in einem verteilten Cache dar, da jede Sekunde Tausende von Objekten serialisiert werden müssen, bevor sie zur speicherinternen Speicherung an den verteilten Cache gesendet werden. Und jede Verlangsamung hier führt zu einer Verlangsamung des verteilten Caches.
Das andere Problem besteht darin, dass ein umfangreicher serialisierter Bytestrom das Zwei- bis Dreifache an zusätzlichem Speicherplatz verbraucht und die Gesamtspeicherkapazität eines verteilten Caches verringert. Ein In-Memory-Speicher kann niemals so groß sein wie ein Festplattenspeicher, was dies zu einem noch heikleren Thema für einen verteilten Cache macht.
Um .NET-Serialisierungsprobleme zu überwinden, NCache hat a implementiert Kompaktes Serialisierungs-Framework. In diesem Rahmen, NCache speichert Zwei-Byte-Typ-IDs anstelle vollständig qualifizierter Assembly-/Klassennamen. Es reduziert den serialisierten Bytestrom weiter, indem nur die Feldwerte serialisiert und deren Typdetails ausgeschlossen werden. Endlich, NCache Das Compact Serialization Framework vermeidet die Verwendung von .NET Reflection aufgrund seines Mehraufwands durch den direkten Zugriff auf Felder und Eigenschaften des Instanzobjekts.
Es gibt zwei Möglichkeiten zu verwenden NCache Kompakte Serialisierung in Ihrer Anwendung.
- Lassen NCache Generieren Sie zur Laufzeit einen kompakten Serialisierungscode
- Implementieren Sie selbst eine ICompactSerializable-Schnittstelle
In diesem Blog werde ich mich nur auf den ersten Ansatz beschränken. Den zweiten Ansatz bespreche ich in einem separaten Blog.
Lassen NCache Generieren Sie zur Laufzeit einen kompakten Serialisierungscode
Identifizieren Sie die Objekttypen, die Sie zwischenspeichern, und registrieren Sie sie NCache als kompakte Serialisierungstypen, wie in Abbildung gezeigt. Das ist alles, was Sie tun müssen, und NCache kümmert sich um den Rest.
Abbildung 1: Registertypen für die kompakte Serialisierung mit NCache
NCache sendet die registrierten Typen an NCache Client zum Zeitpunkt der Initialisierung. Basierend auf den empfangenen Typen, NCache Der Client generiert den Laufzeitcode zum Serialisieren und Deserialisieren jedes Typs. Der Laufzeitcode wird nur einmal von generiert NCache Client zum Zeitpunkt der Initialisierung gespeichert und immer wieder verwendet. Es läuft viel schneller als die auf Reflection basierende Serialisierung.
Daher verwenden NCache Durch die kompakte Serialisierung können Sie Ihren verteilten Cache-Speicher effizient nutzen und die Leistung Ihrer Anwendung steigern.
Laden Sie also eine voll funktionsfähige 60-Tage-Testversion von herunter NCache Enterprise und probiere es selbst aus.
Hallo,
Wir verstehen, dass Sie oben zwei Optionen zusammengestellt haben. Wann würden Sie die kompakte Serialisierung über die IDE verwenden oder die Schnittstelle implementieren?
-Javed