Stavo passando per gli articoli per capire di più sui serializzatori datacontractserializer e binaryformatter. Sulla base della lettura fin qui svolta ho avuto l'impressione che il formato binario avrebbe dovuto avere un ingombro minore rispetto al datacontractorerializer. Il motivo è che DataContractSerializer si serializza su infoset xml mentre il formato binario serializza su un formato binario proprietario.DataContractSerializer vs BinaryFormatter performance
seguito è il test
[Serializable]
[DataContract]
public class Packet
{
[DataMember]
public DataSet Data { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}
DataSet è stato popolato con 121317
righe dalla tabella [AdventureWorks].[Sales].[SalesOrderDetail]
using (var fs = new FileStream("test1.txt", FileMode.Create))
{
var dcs = new DataContractSerializer(typeof(Packet));
dcs.WriteObject(fs, packet);
Console.WriteLine("Total bytes with dcs = " + fs.Length);
}
using(var fs = new FileStream("test2.txt", FileMode.Create))
{
var bf = new BinaryFormatter();
bf.Serialize(fs, packet);
Console.WriteLine("Total bytes with binaryformatter = " + fs.Length);
}
Results
Total bytes with dcs = 57133023
Total bytes with binaryformatter = 57133984
Domanda Perché il numero di byte per BinaryFormatter più di DataContractSerializer? Non dovrebbe essere molto meno?
Grazie per l'intuizione. Sono bloccato con l'uso di DataSet. Troppi problemi !! – stackoverflowuser
@stackoverflowuser: Ho avuto un'ottima fortuna con l'esecuzione del flusso serializzato attraverso un deflatore, se la dimensione è un grosso problema. –