[C#]Json.net vs Jil vs ServiceStack.Text的效能比較
前言
因為目前系統上有非常多的server端溝通web api的方式,這導致了有非常大量和非常多的Serialize和Deserialize需要做,便找了一下各種json parse的工具,當然json.net大家都已經很熟悉了,而且功能也非常的強大,不過還是不免好奇有哪些比較知道比較多人用的類似json.net的工具,最後就找了這三種,比較一下哪一種效能會比較好,畢竟類似的工具作越大效能的體現也會越重要。
預備開始準備工作
在此我建立了一個資料表Employee,然後新增三萬三仟多筆的資料來做測試
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Bid { get; set; }
public string Phone { get; set; }
public string Title { get; set; }
}
因為我們很多時候光是一個需求,可能就要parse好幾種資料,所以為了模擬parse多種資料,所以同樣的格式我parse了四次,以測試比較實際的狀況
首先我們來看一下json.net
var client = new HttpClient();
var result = client.GetStringAsync("http://localhost:11084/api/value");
var watch = new Stopwatch();
watch.Start();
Newtonsoft.Json.JsonConvert.DeserializeObject<List<Employee>>(result.Result);
Newtonsoft.Json.JsonConvert.DeserializeObject<List<Employee>>(result.Result);
Newtonsoft.Json.JsonConvert.DeserializeObject<List<Employee>>(result.Result);
Newtonsoft.Json.JsonConvert.DeserializeObject<List<Employee>>(result.Result);
Console.Write("json.net second is " + watch.ElapsedMilliseconds);
watch.Stop();
結果
json.net second is 1163
再來是測試Jil的部份,官方說明也聲稱自己快很多,那實測看看吧
var client = new HttpClient();
var result = client.GetStringAsync("http://localhost:11084/api/value");
var watch = new Stopwatch();
watch.Start();
JSON.Deserialize<List<Employee>>(result.Result);
JSON.Deserialize<List<Employee>>(result.Result);
JSON.Deserialize<List<Employee>>(result.Result);
JSON.Deserialize<List<Employee>>(result.Result);
Console.WriteLine("jir second is " + watch.ElapsedMilliseconds);
watch.Stop();
結果
jir second is 532
最後是ServiceStack的比較
var client = new HttpClient();
var result = client.GetStringAsync("http://localhost:11084/api/value");
var watch = new Stopwatch();
watch.Start();
JsonSerializer.DeserializeFromString<List<Employee>>(result.Result);
JsonSerializer.DeserializeFromString<List<Employee>>(result.Result);
JsonSerializer.DeserializeFromString<List<Employee>>(result.Result);
JsonSerializer.DeserializeFromString<List<Employee>>(result.Result);
Console.WriteLine("ServiceStack.Text second is " + watch.ElapsedMilliseconds);
watch.Stop();
結果
ServiceStack.Text second is 1737
結論
就跟jil的官方數據一模一樣,jil確實是最快的,其實大部份的情境我都覺得官方是正確的,不過因為從未真的自己手動測試過,所以實際測試完後,發現官方所言不假,但是現實狀況下json.net還是有很多功能,或許團隊是需要使用到的,但是如果只是要serialize或Deserialize的功能的話,真的是可以考慮一下jil了。