Przeglądałem artykuły, aby lepiej zrozumieć serię próbników datacontractserializer i binaryformatter. Na podstawie dotychczasowych odczytów miałem wrażenie, że format binarny powinien mieć mniejszą powierzchnię niż moduł przetwarzania danych. Powodem jest to, że DataContractSerializer serializuje do pliku xml, natomiast binaryformatter serializuje do zastrzeżonego formatu binarnego.DataContractSerializer vs BinaryFormatter performance
Poniżej 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 została wypełniona 121317
rzędach od [AdventureWorks].[Sales].[SalesOrderDetail]
tabeli
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
pytań Dlaczego liczba bajtów dla BinaryFormatter więcej niż DataContractSerializer? Czy nie powinno to być dużo mniejsze?
Dzięki za wgląd. Utknąłem przy użyciu DataSet. Zbyt wiele problemów !! – stackoverflowuser
@stackoverflowuser: Miałem doskonałe szczęście z uruchomieniem serializowanego strumienia przez deflater, jeśli rozmiar jest dużym problemem. –