• Google ProtocolBuffer.net简介与使用


      protobuf-net是Google的ProtocolBuffer的.net实现。ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。

      引用protobuf-net.dll组件

    1、能过特性定义ProtoBuf格式的类

    [ProtoContract] 
    public class User 
    { 
        [ProtoMember(1, IsRequired = true)] 
        public int UserID { get; set; }

        [ProtoMember(2, IsRequired = true)] 
        public string UserName { get; set; }

    }

    required表示在这个消息中这个字段是必须的,就像数据库中的非空字段一样的,必须要有值。 
    optional表示是可选的,可以有,也可以没有,对应到数据库中的就可空字段。 
    repeated表示这个字段是可以重复的,一个消息是可以有一个或多个这个字段的。

    2、序列化:

    using (Stream file = File.Create(path)) 
    { 
        Serializer.Serialize<List<User>>(file, list); 
        file.Close(); 
    }

    3、反序列化:

    List<User> list2 = new List<User>(); 
    using (Stream file = File.OpenRead(path)) 
    { 
        list2 = Serializer.Deserialize<List<User>>(file); 
    }

    4、例子:

    namespace ConsoleApplication1 
    { 
        class Program 
        { 
            static void Main(string[] args) 
            { 
                List<User> list = new List<User>(); 
                for (int i = 0; i < 1000; i++) 
                { 
                    list.Add(new User() { UserID = i, UserName = "u" + i.ToString() }); 
                }

                //json 
                string path2 = AppDomain.CurrentDomain.BaseDirectory + "json.txt"; 
                System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer(); 
                string json = jss.Serialize(list); 
                File.WriteAllText(path2, json);

                //protobuff 
                string path = AppDomain.CurrentDomain.BaseDirectory + "protobuf.txt"; 
                using (Stream file = File.Create(path)) 
                { 
                    Serializer.Serialize<List<User>>(file, list); 
                    file.Close(); 
                }

                List<User> list2 = new List<User>(); 
                using (Stream file = File.OpenRead(path)) 
                { 
                    list2 = Serializer.Deserialize<List<User>>(file); 
                }

                foreach (User u in list2) 
                { 
                    Console.WriteLine(string.Format("UserID={0}, UserName={1}", u.UserID, u.UserName)); 
                }

                Console.ReadKey(); 
            } 
        }

        [ProtoContract] 
        public class User 
        { 
            [ProtoMember(1, IsRequired = true)] 
            public int UserID { get; set; }

            [ProtoMember(2, IsRequired = true)] 
            public string UserName { get; set; }

        } 
    }

     

    测试结果:

    json.txt 33k

    protobuf.txt 11k

    大小相差了3倍

    参考资料:http://code.google.com/p/protobuf-net/

         http://www.cnblogs.com/facebuyer/archive/2009/08/25/1553849.html

     

    Windows Server 2008 R2 X64 + IIS7.5 + .net Framework 4 + WCF restful + ProtoBuf.Net + Base64String
    Windows Server AppFabric + NLB + Application Request Routing
    测试群集后的性能和效率:这几个结合测试,你会发现更高效的SOA方式

  • 相关阅读:
    学习Python第三天
    学习Python第二天
    学习Python第一天
    centos7 系统优化
    crond计划任务
    day2
    day1
    A.浏览器访问 kube-apiserver 安全端口
    12.清理集群
    11.部署 harbor 私有仓库
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1774468.html
Copyright © 2020-2023  润新知