项目配置方法

作者: 塘朗山小钻风 | 来源:发表于2021-03-02 11:46 被阅读0次

    需求

    在项目开发中需要把很多编辑配置信息做成配置文件,在运行时加载解析使用,这需要在三个要求之间取得较好平衡: 开发便捷,序列化后文件大小,加载速度。当然还需要扩展数据结构后还能加载老数据才行。

    CSV这种逗号制表符作为分隔符的文件非常方便使用外部工具编辑,但是需要编写读取代码(可以在读取时判断是否为旧版本数据,不方便热更新),文件大小和加载速度优良。

    xml这种就冗余信息太多文件大小没优势,但方便带一些数据标签,behaviorac的行为树信息就是xml配置的。

    将要着重对比的是protobuf和json

    protobuf能对数据压缩:int字段的值需要几字节编码就用几字节编码而不会全部用4字节编码。而且也不会像json那样把字段名编码进去。所以在示例中json:25K protobuf:8K

    它们都能优雅的兼容老版本数据

    接下来比较加载速度:


    message GoodsInfo //商品信息

    {

        optional string GoodsIndex  = 1;

    optional string GoodsId  = 2;

    optional string CostDollars  = 3;

    optional bool OnSale  = 4;

        optional string ExternJson  = 5;

    }

    message QueryGoodsListRsp

    {

        repeated GoodsInfo GoodsList = 1;

    }

    C#中用于json的对等结构

    [System.Serializable]

    class GoodsInfo

    {

        [SerializeField] public string GoodsIndex;

        [SerializeField] public string GoodsId;

        [SerializeField] public string CostDollars;

        [SerializeField] public bool OnSale;

        [SerializeField] public string ExternJson

    }

    [System.Serializable]

    class QueryGoodsListRsp

    {

        [SerializeField]

        public List<GoodsInfo> GoodsList = new List<GoodsInfo>(256);

    }


    把测试数据保存到文件

    如下测试加载速度:


            var start = DateTime.Now.Ticks;

            var var1 = SerializeHelper.Deserialize<CSMessage.QueryGoodsListRsp>(File.ReadAllBytes(Application.dataPath + "/proto.bytes"));

            Debug.Log(DateTime.Now.Ticks - start);

            start = DateTime.Now.Ticks;

            var var2 = JsonUtility.FromJson<QueryGoodsListRsp>(File.ReadAllText(Application.dataPath + "/json.txt"));

            Debug.Log(DateTime.Now.Ticks - start);


    protobuf: 319454

    json: 9939

    比较出人意料:json加载比protobug快30倍左右。所以protobuf适用于消息,能把消息编码得很小,解析速度就不如改进过的JSON接口JsonUtility了。

    相关文章

      网友评论

        本文标题:项目配置方法

        本文链接:https://www.haomeiwen.com/subject/iqutqltx.html