项目配置方法

需求

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

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了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 差不多有一个多月没有更新了,因为这段时间在做一件事情:学习netty,当然并没有学完现在相当于是一个学习前的一个前...
    小鸡在路上阅读 269评论 0 1
  • Astronomygonova - A wrapper for libnova -- Celestial Mech...
    JumboWu阅读 8,604评论 0 41
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来...
    梦幻_78af阅读 2,069评论 1 10
  • Overview The ccxt library is a collection of available cr...
    郭蝈儿蝈儿阅读 3,644评论 0 1