LitJson 和 Newtonsoft.Json 性能对比


之前一直用 LitJson 做Json序列化,主要用于Unity,修改下源码让其支持 float类型后用起来也一直没有什么大问题,最近抽空在研究.net core的内容,发现在.net core开发环境下微软自带的Json库 Newtonsoft.Json,用起来也很方便,而且支持Dictionary的字典类型的序列化,也不需要在指定的类上加 [Serializable]的特性,而且可以自定义哪些字段可以被序列化,哪些被忽略,总之用起来很方便,然后就向用其替代LitJson,所以就先比较性能。

LitJson测试代码】
List<Person> lstPerson = new List<Person>();

Person onePerson = new Person() {
    name = "loom",
    nickname = "loom",
    sex = 1,
    age = 20,
    idNum = "123456123456789876",
    phoneNum = "13333333333",
    emailNum = "13333333333@qq.com",
    homeAddress = "china china china china china",
    occupation = "main programer",
    hobby = "music,running,coding"
};

for (int i = 0; i < 1000; i++)
{
    lstPerson.Add(onePerson);
}

Stopwatch sw = new Stopwatch();
sw.Start();
string json = LitJson.JsonMapper.ToJson(lstPerson);
sw.Stop();
UnityEngine.Debug.Log("LitJson_1000耗时 : "+sw.Elapsed);
Newtonsoft.Json测试代码
List<Person> lstPerson = new List<Person>();

Person onePerson = new Person()
{
    name = "loom",
    nickname = "loom",
    sex = 1,
    age = 20,
    idNum = "123456123456789876",
    phoneNum = "13333333333",
    emailNum = "13333333333@qq.com",
    homeAddress = "china china china china china",
    occupation = "main programer",
    hobby = "music,running,coding"
};

for (int i = 0; i < 1000; i++)
{
    lstPerson.Add(onePerson);
}

Stopwatch sw = new Stopwatch();
sw.Start();
string json = JsonConvert.SerializeObject(lstPerson);
sw.Stop();
UnityEngine.Debug.Log(sw.Elapsed);
结果

100个元素测试结果,当然还跟类中有多少字段相关
1000个元素测试结果,当然还跟类中有多少字段相关
5000个元素测试结果,当然还跟类中有多少字段相关
10000个元素测试结果,当然还跟类中有多少字段相关

分析

通过上面的测试我们好像发现在5000个元素以下时,LitJson有明显的优势,5000个以上时Newtonsoft.Json开始有优势,但是,我发现在100和1000时其实他们的差别时不大的,那么可能的原因是什么呢,我在想是不是dll加载所导致的问题呢,那么我们对Newtonsoft.Json进行两次序列化,不考虑首次加载以第二次为准测试,再看一下:
单个元素第一次第二次对比
100元素时第一次第二次对比
5000元素时第一次第二次对比
10000元素时第一次第二次对比

结论

通过以上的测试分析我们发现,Newtonsoft.Json除了在首次序列化时需要加载dll会导致序列化比较慢以外,在其他情况下,即当Newtonsoft.Json已经序列化一次后(即Newtonsoft.Json已经状态加载完成了),都是全部领先Litjson的,所以改用Newtonsoft.Json时完全没有问题的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值