ProtoBuf测试手记

自从认识了“博客园”,我一直潜水,但是现在我觉得不潜了。
恰好,在测试ProtoBuf的过程中遇到了问题,特借宝地记录下测试的情况,有朋友遇到我类似情况的,一起交流一下吧。

//[ProtoContract]
    //public class IPArrays
    //{
    //    private IPArray[] arr = null;
    //    private int key;

    //    [ProtoMember(1)]
    //    public IPArray[] Arr
    //    {
    //        get
    //        {
    //            return this.arr;
    //        }
    //        set
    //        {
    //            this.arr = value;
    //        }
    //    }
    //    [ProtoMember(2)]
    //    public int Key
    //    {
    //        get
    //        {
    //            return this.key;
    //        }
    //        set
    //        {
    //            this.key = value;
    //        }
    //    }
    //}

    //[ProtoContract]
    //public class IPArray
    //{
    //    private int[] arr = null;

    //    [ProtoMember(1)]
    //    public int[] Arr
    //    {
    //        get
    //        {
    //            return this.arr;
    //        }
    //        set
    //        {
    //            this.arr = value;
    //        }
    //    }
    //    [ProtoMember(2)]
    //    public string IP
    //    {
    //        get
    //        {
    //            StringBuilder builder = new StringBuilder();
    //            for (int i = 0; i < this.arr.Length; i++)
    //            {
    //                builder.Append(".");
    //                builder.Append(this.arr[i].ToString());
    //            }
    //            return builder.ToString().Substring(1);
    //        }
    //        set
    //        {
    //            string[] textArray = value.Split(".".ToCharArray());
    //            for (int i = 0; i < this.arr.Length; i++)
    //            {
    //                this.arr[i] = int.Parse(textArray[i]);
    //            }
    //        }
    //    }
    //}

public class IPArraysArr : Dictionary<int, IPArrays>
    {
}
面就是我定义的结构体,将全世界的IP和国家的对照表倒入此结构体中。且不说这种方式好与坏,因为今天讨论的是为什么protobuf序列化出来的问题体积那么大的问题(有可能和用了自定义的IpArray有关系,这个还没测到)。思路是:假如客户端IP为58.133.198.5,则对此IP做分割,首先在字典IPArraysArr 中查key为58的IPArrays。
this.Arr[133].Arr[198]通过IP的第二和第三个段就可以得到国家ID了,因为在国家的前提下,第四段被分拆的可能性非常小。
关于IP和国家对照库的设计思路就不过多讲了,因为这个设计实在是太差劲了,还有很大的优化空间。
情况就是这样,我也搞不清楚为什么ProtoBuf会序列化出来那么大一个文件。高手们请指教。

posted on 2009-08-12 17:59  pq  阅读(1167)  评论(5编辑  收藏  举报

导航