Ho ripetuto il test sui serializzatori (http://blogs.dotnethell.it/espositos/Benchmark-Serializzazioni__16224.aspx) aggiungendo altri due scenari:
istanza:
[Serializable][DataContract]
public class item {
[DataMember]
public int ID {get; set; }
[DataMember]
public string LongString {get; set; } //MANCA IL BYTE ARRAY
[DataMember]
public DataTable Table {get; set; }
}
Questa istanza viene popolata all'inizio del benchmark così:
ID= intero random
LongString = Convert.ToBase64String(bytearray di 1MB)
Table = un datatable deserializzato con DataSet.ReadXml() di 12 colonne per 300 righe circa
Risultati:
Formatter bytes (%) ms. serializzazione (%) ms. deserializzazione(%)
BinaryFormatter 1.718.140 (100%) 24 (100%) 22 (100%)
SoapFormatter 1.801.536 (105%) 107 (446%) 34 (155%)
XMLSerializer 1.737.248 (101%) 17 (71%) 26 (117%)
DataContractS. 1.675.436 (98%) 19 (79%) 40 (182%)
DataContractJsonS. 1.703.168 (99%) 32 (133%) 87 (395%)
istanza:
[Serializable][DataContract]
public class item {
[DataMember]
public int ID {get; set; }
[DataMember]
public string[] LongString {get; set; } //ARRAY DI STRING + MANCA IL BYTE ARRAY
[DataMember]
public DataTable Table {get; set; }
}
Questa istanza viene popolata all'inizio del benchmark così:
ID= intero random
LongString = array di 1000 string random di dimensione 1KBca
Table = un datatable deserializzato con DataSet.ReadXml() di 12 colonne per 300 righe circa
Risultati:
Formatter bytes (%) ms. serializzazione (%) ms. deserializzazione(%)
BinaryFormatter 1.691.046 (100%) 29 (100%) 22 (100%)
SoapFormatter 1.795.405 (106%) 103 (355%) 34 (179%)
XMLSerializer 1.726.153 (102%) 22 (76%) 26 (113%)
DataContractS. 1.662.405 (98%) 18 (62%) 40 (167%)
DataContractJsonS. 1.671.485 (99%) 38 (132%) 87 (413%)
Considerazioni:
A differenza del precedente test, questo dimostra come i serializzatori non binari sprecano risorse nella serializzazione di un bytearray.... Differentemente resta importante il risultato del DataContractSerializer (e subito dopo l'XMLSerializer) per la velocità di serializzazione (fino al 38% più veloce) mantenendo una dimensione anche inferiore a quella del BinaryFormatter. Il JsonSerializer ha beneficiato moltissimo dell'assenza del bytearray, dimostrandosi una valida alternativa al DataContract negli scenari che lo utilizzano (AJAX o JavaScript).
Ciao