一下代码比较了二进制序列化、xml序列化、Protobuf序列化的运行时间,可是代码显得十分冗余,是否有大神可以指点一二,万分感谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.Diagnostics;namespace ProtoBuf
{class Program{static void Main(string[] args){List<Person> list = new List<Person>();int count = 100;double SumTs1 = 0, SumTs2 = 0,SumTs3=0,SumTs4=0,SumTs5=0,SumTs6=0;for (var i=0;i<1000;i++){var person = new Person{Sno = i,Name = "Name" + i,Age = 20 + i,HomeTown="HomeTown"+i,Shool="Shool"+i,Country="Country"+i,Language="Language"+i,Professional="professional"+i,Study="study"+i,FatherName="fatherName"+i,MotherName="motherName"+i};list.Add(person);}do{//binary序列化开始DateTime binaryTime1 = System.DateTime.Now;BinaryFormatter bf = new BinaryFormatter();Stream BinaryStream = new FileStream("e:/person.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);//Stream BinaryStream = new MemoryStream();bf.Serialize(BinaryStream, list);BinaryStream.Close();DateTime binaryTime2 = System.DateTime.Now;//binary反序列化开始DateTime debinaryTime1 = System.DateTime.Now;Stream deBinaryStream = new FileStream("e:/person.txt", FileMode.Open, FileAccess.Read, FileShare.Read);//Stream deBinaryStream = new MemoryStream();object obj =bf.Deserialize(BinaryStream);deBinaryStream.Close();DateTime debinaryTime2 = System.DateTime.Now;//Xml序列化开始DateTime XmlTime1 = System.DateTime.Now;XmlSerializer xs = new XmlSerializer(typeof(List<Person>));Stream XmlStream = new FileStream("e:/2person.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);xs.Serialize(XmlStream, list);XmlStream.Close();DateTime XmlTime2 = System.DateTime.Now;//Xml反序列化开始DateTime deXmlTime1 = System.DateTime.Now;XmlSerializer dexs = new XmlSerializer(typeof(List<Person>));Stream deXmlStream = new FileStream("e:/2person.txt", FileMode.Open, FileAccess.Read, FileShare.Read);//Stream deXmlStream = new MemoryStream();List<Person> list2 = (List<Person>)dexs.Deserialize(deXmlStream);deXmlStream.Close();DateTime deXmlTime2 = System.DateTime.Now;//ProtoBuf序列化开始DateTime ProtoBufTime1 = System.DateTime.Now;Stream ProtoBufStream = new MemoryStream();ProtoBuf.Serializer.Serialize(ProtoBufStream, list);ProtoBufStream.Close();DateTime ProtoBufTime2 = System.DateTime.Now;//ProtoBuf反序列化开始DateTime deProtoBufTime1 = System.DateTime.Now;Stream deProtoBufStream = new MemoryStream();Person newPerson = ProtoBuf.Serializer.Deserialize<Person>(deProtoBufStream);deProtoBufStream.Close();DateTime deProtoBufTime2 = System.DateTime.Now;//计算时间和运行次数SumTs1 += binaryTime2.Subtract(binaryTime1).TotalMilliseconds;SumTs2 += debinaryTime2.Subtract(debinaryTime1).TotalMilliseconds;SumTs3 += XmlTime2.Subtract(XmlTime1).TotalMilliseconds;SumTs4 += deXmlTime2.Subtract(deXmlTime1).TotalMilliseconds;SumTs5 += ProtoBufTime2.Subtract(ProtoBufTime1).TotalMilliseconds;SumTs6 += deProtoBufTime2.Subtract(deProtoBufTime1).TotalMilliseconds;count--;} while (count > 0);Console.WriteLine("*********************************序列化比较结果************************************");Console.WriteLine("*** binary序列化 Xml序列化 ProtoBuf序列化 ");Console.WriteLine("***序列化 "+SumTs1/100+" "+SumTs3/100+" "+SumTs5/100);Console.WriteLine("***反序列化 "+SumTs2/100+" "+SumTs4/100+" "+SumTs6/100);Console.WriteLine("**********************************************************************************");}}[ProtoBuf.ProtoContract][Serializable]public class Person{public int Sno { get; set; }public string Name { get; set; }public int Age { get; set; }public string HomeTown { get; set; }public string Shool { get; set; }public string Country{get;set;}public string Language{get;set;}public string Professional{get;set;}public string Study{get;set;}public string FatherName{get;set;}public string MotherName{get;set;}}
}