LitJson 和 Newtonsoft.Json 性能对比

tech2025-02-19  5

LitJson 和 Newtonsoft.Json 性能对比

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);

结果

分析

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

结论

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

最新回复(0)