我正在阅读文章,以更好地理解数据合同序列化器和二进制格式化器序列化器。根据目前的阅读,我的印象是二进制格式化器应该比数据合同序列化器占用更少的空间。原因是DataContractSerializer序列化为XML信息集,而BinaryFormatter序列化为专有的二进制格式。
以下是测试内容
[Serializable]
[DataContract]
public class Packet
{
[DataMember]
public DataSet Data { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}
从[AdventureWorks].[Sales].[SalesOrderDetail]
表中填充了121317
行数据到DataSet中。
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
问题 为什么binaryformatter的字节数比datacontractserializer多?它不应该更少吗?