È un processo di produzione di una forma compatta di oggetto serializzato per il miglioramento delle prestazioni che si traduce in viaggi di rete più rapidi. Come illustra il nome, il file serializzato compatto è compatto nella forma di dati e processo. L'idea alla base della serializzazione compatta è che a ogni "tipo noto" (un tipo noto è un tipo registrato con il framework) viene assegnato un handle di tipo univoco a 2 byte dal framework, che consente al deserializzatore di identificare in modo univoco i "tipi noti" .
Si supponga, ad esempio, che il framework assegni un handle 0 a System.Int32. Quindi il serializzatore scrive l'handle a 2 byte seguito da 4 byte di valore dell'oggetto nel flusso. Deserializer legge l'handle, determina il tipo di oggetto, quindi crea e popola l'oggetto con il relativo valore. D'altra parte, la serializzazione nativa scrive le informazioni complete sul tipo con i dati dell'oggetto. NCache supera in modo sofisticato questi problemi della sterilizzazione nativa nei seguenti modi:
Per utilizzare la serializzazione compatta, è necessario definire un costruttore pubblico predefinito (senza parametro) in un tipo serializzabile compatto e registrare quel tipo con NCache Manager. NCache ora supporta i tipi generici personalizzati. Tutti i tipi generici con qualsiasi numero di argomenti possono essere serializzati tramite la serializzazione compatta. Se un client non desidera aggiungere tipi generici e relativi parametri tramite l'interfaccia utente, ha la possibilità di aggiungerli tramite la classe IGenericTypes.
Per utilizzare i tipi serializzabili compatti con NCache Configura cache con NCache Manager e quindi registra i tuoi tipi serializzabili compatti con NCache.
È possibile registrare i tipi uno per uno tramite "Aggiungi tipi" pulsante. Esegui i seguenti passaggi per registrare i tuoi tipi con la cache configurata:
Questo è l'altro modo per registrare tipi compatti generici tramite "Generic Type Handler". Con Generic Type Handler l'utente può aggiungere tutti i tipi generici in una volta implementando la nostra interfaccia. Ciò consente di risparmiare tempo e fatica. Ecco un codice di esempio per questo.
public class CustomGenericType <T,K,V> { }
public class SetGenerics: IGenericTypeProvider
{
Type[] types = new Type[6];
#region IGenericTypeProvider Members
Type[] IGenericTypeProvider.GetGenericTypes()
{
types[0]=typeof(Dictionary<string, Customer>);
types[1]=typeof(List<int>);
types[2]=typeof(CustomGenericType<Employee, Product, Customer>);
types[3]=typeof(CustomGenericType<Employee, Product, int>);
types[4]=typeof(CustomGenericType<Employee, string, byte>);
types[5]=typeof(CustomGenericType<string, Customer, bool>);
return types;
}
#endregion
}
Per i tipi di registrazione, attenersi alla seguente procedura.