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