一下代码比较了二进制序列化、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;}
}
}