我正在阅读文章以了解有关datacontractserializer和binaryformatter序列化程序的更多信息。根据迄今为止所做的阅读,我的印象是binaryformatter应该比datacontractserializer的占用空间更小。原因是DataContractSerializer序列化为xml infoset,而binaryformatter序列化为专有二进制格式。DataContractSerializer vs BinaryFormatter性能
以下是测试
[Serializable]
[DataContract]
public class Packet
{
[DataMember]
public DataSet Data { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}
数据集填充121317
行从[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
问题 为什么是BinaryFormatter的字节数比DataContractSerializer的多吗?它不应该小得多吗?
感谢您的洞察力。我坚持使用DataSet。太多的问题! – stackoverflowuser 2011-01-20 18:39:25