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

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 = 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时完全没有问题的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容