【优化】序列化库的选择(FlatBuffers,ProtoBuf,MessagePack,Json)

编程入门 行业动态 更新时间:2024-10-17 17:26:22

【优化】<a href=https://www.elefans.com/category/jswz/34/1771358.html style=序列化库的选择(FlatBuffers,ProtoBuf,MessagePack,Json)"/>

【优化】序列化库的选择(FlatBuffers,ProtoBuf,MessagePack,Json)

如果是新项目:
选择Google FlatBuffers
它在GC Alloc & Time上均是最优的,毕竟是Google的技术产物。
.html
如果因为某些原因,要使用Json:
newtonsoft(Json.Net)是最优的。
LitJson
FastJson
Rapid Json
System.Net.Json
......
都要差一些。
(JsonUtility功能太少,不支持字典的序列化,一些简单的需求倒没问题。)
1.NewtonJson库的GC量以及耗时最低,最差是System.Net.Json。
2.其中GC量大的原因是:System.Text.Encoding.UTF8.GetString函数,以及Json库内部字符串处理,本身IO读取产生的GC量相对比较小。
二进制的优化策略:
1.常用小配置文件可以采用一次性将KEY和VALUE全部读取;
2.数据列不是很多但数据量中等的配置,可以采用只读取KEY,用到取VALUE再读取策略;
3.数据列很多并且数据量很大的配置,可以采用全部异步,预加载的方式优化;
4.采用预加载的方式,可以将配置文件IO部分和解析部分执行分开,先IO异步预加载完,再执行解析,尽量将内存峰值降低,防止因为配置文件导致堆内存过高。
--
这是直接引用文章里的一段,但这种优化方式的思想是通用的:
文件小:KEY和VALUE一次性读取
文件中等:可以先只读KEY,用到VALUE时再读
文件很大:可以采用异步(预加载)+分段,异步可以避免阻塞主线程,分段可以避免内存峰值瞬间过高,造成卡顿严重或是内存溢出。

===========下面是详细的废话==============

最近开了新的项目,因为要重新搭建一套框架,所以在涉及到大量配置表需要解析的时候,就要考虑选择哪一种序列化库了,其实有大量的项目,现在还是在使用json库来来做为数据交换的格式,足够的稳定,成熟,明文,方便阅读。
在我接手的上一个项目里,也是使用的json来做为序列化库,当时对newtonsoft Json狠狠的吐槽了一把,它的性能有多么多么的差,尤其是在一些低端机上,GC Alloc和调用耗时都很大,当然, 这也与当时加载的云控的数据量有关。
加载一万多个字节的数据(如果没有记错的话),但之前去参加UWA大会的时候,听到关于序列化库的分享,在json里,newtonsoft算是综合性能最好的一个......
今天就把UWA的视频给挖出来,将精华部分的内容分享出来,虽然我们最后可能还是会采用json
目前常用的库列化库有以下几种:
1.ProtoBuf-大明鼎鼎Google的技术产物,think XML, but smaller, faster, and simpler,二进制格式,效率是肯定高于json的
2.FlatBuffers-还是Google的技术产物,综合性能上肯定是要超越ProtoBuf的,不然没必要gmfrym出来这么一套,在整体的GC Alloc以及耗时上,都要优于ProtoBuf,简单看了一眼,说是不需要parsing/unpacking,这样文件的大小会不会相对更大一些?
这是目前序列化库里,最优解!
3.MessagePack-It's like JSON.but fast and small.(这好像ProtoBuf说过的:)
4.Json-hmmmmm.......
直接上传对比截图:

可以看到,FlatBuffers秒杀一众,MessagePack在移动端真的是蛮尴尬
的存在,但所UWA说,MessagePack在PC平台是比较有优势的。

扩展阅读:
/
U Sparkle 客户端配置文件优化策略(具体JSON库性能的对比)
.html

更多推荐

【优化】序列化库的选择(FlatBuffers,ProtoBuf,MessagePack,Json)

本文发布于:2024-02-26 21:31:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703988.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列化   FlatBuffers   ProtoBuf   MessagePack   Json

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!