[TestFixture] public class Class1 { [Test] public void SerializableTest() { var list = new List<User>(); for (var i = 0; i < 10000; i++) { var user = new User{ Id = i, Name = string.Format("jroger{0}", i), Age = i + 20 }; list.Add(user); } Trace.WriteLine("begin serializer."); using (var fileStream = new FileStream(@"d:\a.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read)) { Serializer.Serialize(fileStream, list); fileStream.Close(); fileStream.Dispose(); } using (var fileStream = File.OpenRead(@"d:\a.txt")) { var users = Serializer.Deserialize<List<User>>(fileStream); Trace.WriteLine(string.Format("{0}-{1}", users, users.Count)); } Trace.WriteLine("end serializer."); Trace.WriteLine("binary serializable begin."); using (var fileStream = new FileStream(@"d:\b.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read)) { var bin = new BinaryFormatter(); bin.Serialize(fileStream, list); fileStream.Close(); fileStream.Dispose(); } Trace.WriteLine("binary serializable end."); } } [Serializable] [ProtoContract] public sealed class User { [ProtoMember(1)] public int Id { get; set; } [ProtoMember(2)] public string Name { get; set; } [ProtoMember(3)] public int Age { get; set; } }
第一次使用,记录一下。
开发环境:Winows 8 + Visual Studio 2012。
使用protobuf-net这个类库序列化之后的大小是:193KB。
使用BinaryFormatter序列化之后的大小是:370KB。
从结果上面来看,protobuf-net的优势还是相当可观的。之所以使用BinaryFormatter序列化后所占存储空间大是因为序列化后的文件里面存储了程序集相关的二进制信息等,而protobuf-net序列化后则干净很多,所以所占空间也就小了。
protobuf-net项目首页地址:https://code.google.com/p/protobuf-net/