项目配置方法

需求

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

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 GoodsList = new List(256);

}


项目配置方法_第1张图片
把测试数据保存到文件

如下测试加载速度:


        var start = DateTime.Now.Ticks;

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

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

        start = DateTime.Now.Ticks;

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

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


protobuf: 319454

json: 9939

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

你可能感兴趣的:(项目配置方法)