[C#]Json.net vs Jil vs ServiceStack.Text的效能比較

[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了。