Ieri sera ho passato un po di tempo a fare un banchmark della velocità di serializzazione / deserializzazione dei vari componenti standard del .NET poichè impatta nello scambio dati tra servizi e nella gestione della sessione su SQL Server. Ne posto i risultati. Il test l'ho fatto sulla mia macchinetta di sviluppo in ufficio...
istanza:
[Serializable][DataContract]
public class item {
[DataMember]
public int ID {get; set; }
[DataMember]
public string LongString {get; set; }
[DataMember]
public byte[] LongByteArray {get; set; }
[DataMember]
public DataTable Table {get; set; }
}
Questa istanza viene popolata all'inizio del benchmark così:
ID= intero random
LongByteArray = array di 1MB di byte random
LongString = Convert.ToBase64String(LongByteArray)
Table = un datatable deserializzato con DataSet.ReadXml() di 12 colonne per 300 righe circa
Per ogni tipo di serializzatore ho fatto 10 iterazioni di serializzazione / deserializzazione e conteggiato il tempo con uno Stopwatch, poi ho salvato chiave e tempi in un dizionario ciascuno per dimensione del risultato in byte, millisecondi di serializzazione e deserializzazione. Alla fine ho fatto la media con LINQ e le percentuali in excel:
Risultati:
Formatter bytes (%) ms. serializzazione (%) ms. deserializzazione(%)
BinaryFormatter 2.776.736 (100%) 55 (100%) 30 (100%)
SoapFormatter 3.119.771 (116%) 168 (116%) 147 (490%)
XMLSerializer 3.135.384 (113%) 42 (76%) 73 (234%)
DataContractS. 3.073.568 (111%) 43 (78%) 56 (187%)
DataContractJsonS. 5.448.210 (197%) 356 (647%) 1822 (6073%)
Considerazioni:
A questo punto non posso non confermare il BinaryFormatter come il più conciso e veloce serializzatore in generale... anche se non sempre tutte le classi sono [Serializable]......
Per prestazioni è da considerare buono anche l'XMLSerializer o il DataContract, ma solo per la parte di serializzazione, facendo pensare che durante l'uso di un WS o di un WCF, chi sostiene il maggior costo della procedura serializzazione/deserializzazione è il client del servizio, e non il server in se.
Ciao