Unity中Json庫性能對比測試git
類庫大小對比:github
類庫 | 文件類型 | 大小 |
---|---|---|
NewtonsoftJson | .dll | 353KB |
LitJson | .dll | 56KB |
SimpleJSON | .cs | 68KB |
解析時間對比:
執行次數:10000次json
測試方法 | NewtonsoftJson | LitJson | SimpleJSON |
---|---|---|---|
測試1 | 114ms | 158ms | 52ms |
測試2 | 136ms | 288ms | 126ms |
測試3 | 263ms | 542ms | 169ms |
測試4 | 333ms | 747ms | 200ms |
測試代碼:segmentfault
using UnityEngine; using System.Diagnostics; using LitJson; using SimpleJSON; using Newtonsoft.Json.Linq; /// <summary> /// JsonTest /// ZhangYu 2019-07-11 /// <para>Blog:https://segmentfault.com/a/1190000019731298</para> /// </summary> public class JsonTest : MonoBehaviour { public int count = 10000; private Stopwatch watch; private void Start () { watch = new Stopwatch(); string json1 = "{\"id\":10001,\"name\":\"test\"}"; string json2 = "[1,2,3,4,5,6,7,8,9,10]"; string json3 = "{\"id\":10000,\"username\":\"zhangyu\",\"password\":\"123456\",\"nickname\":\"冰封百度\",\"age\":20,\"gender\":1,\"phone\":12345678910,\"email\":\"zhangyu@xx.com\"}"; string json4 = "[\"test2\",[[\"key1\", \"id\"],[\"key2\", \"hp\"],[\"key3\", \"mp\"],[\"key4\", \"exp\"],[\"key5\", \"money\"],[\"key6\", \"point\"],[\"key7\", \"age\"],[\"key8\", \"sex\"]]]"; JsonParseTest(json1); JsonParseTest(json2); JsonParseTest(json3); JsonParseTest(json4); } private void JsonParseTest(string json) { print("json:" + json); bool isArray = json[0] == '['; NewtonsoftJsonTest(json, isArray); LiteJsonTest(json); SimpleJsonTest(json); print("======================"); } private void NewtonsoftJsonTest(string json, bool isArray) { watch.Reset(); watch.Start(); if (isArray) { for (int i = 0; i < count; i++) { JArray jArray = JArray.Parse(json); } } else { for (int i = 0; i < count; i++) { JObject jObj = JObject.Parse(json); } } watch.Stop(); print("NewtonsoftJson Parse Time(ms):" + watch.ElapsedMilliseconds); } private void LiteJsonTest(string json) { watch.Reset(); watch.Start(); for (int i = 0; i < count; i++) { JsonData jData = JsonMapper.ToObject(json); } watch.Stop(); print("LiteJson Parse Time(ms):" + watch.ElapsedMilliseconds); } private void SimpleJsonTest(string json) { watch.Reset(); watch.Start(); for (int i = 0; i < count; i++) { JSONNode jNode = JSON.Parse(json); } watch.Stop(); print("SimpleJson Parse Time(ms):" + watch.ElapsedMilliseconds); } }
結論:
SimpleJSON獲勝!
SimpleJSON以體積最小,速度最快,集成最容易的優點勝出
SimpleJSON針對Unity在持續優化,更新較快,並且體積小,速度快,有源碼,推薦SimpleJSON
NewtonsoftJson由於體積太大被淘汰,按理來講,這麼大的類庫確定支持更多功能,惋惜現有的項目並無太過複雜的json,沒法檢驗。
LitJson體積也小巧,使用也很方便,惋惜速度徹底沒有優點。app
SimpleJSON的Github地址:https://github.com/Bunny83/Si...性能