由于最近項目中需要用到JSON序列化操作,所以對JSON序列化框架做了一下對比。
Json.NET(Newtonsoft.Json)是我們平常用的最多的框架,現(xiàn)在成為了Visual Studio Web項目模板默認引用的庫之一;fastJSON號稱是最小最快的序列化工具;ServiceStack.Text是著名的Stack Exchange團隊的開源項目。下面我們開始測試工作:
測試環(huán)境:操作系統(tǒng)Windows 8.1,CPU:Intel Core i7-3610QM,Visual Studio 2013。
我們先創(chuàng)建一個控制臺應(yīng)用程序,從NuGet中添加3個庫最新版本的引用。
創(chuàng)建一個可序列化類型:
1 [Serializable] 2 public class Person { 3     public int Id { get; set; } 4     public string Name { get; set; } 5     public int Age { get; set; } 6     public bool Gender { get; set; } 7     public string Address { get; set; } 8     public string IDCard { get; set; } 9 }添加一個公共方法循環(huán)執(zhí)行序列化操作:
1 /// <summary> 2 /// 循環(huán)執(zhí)行序列化操作 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="entity">需要執(zhí)行序列化操作的實體</param> 6 /// <param name="testName">庫的名稱</param> 7 /// <param name="count">循環(huán)測試</param> 8 /// <param name="func">序列化方法的委托</param> 9 PRivate static void PerformanceTest<T>(T entity, string testName, int count, Action<T> func) where T : class { 10 var stopwatch = new Stopwatch(); 11 stopwatch.Start(); 12 for (var i = 0; i < count; i++) { 13 func.Invoke(entity); 14 } 15 stopwatch.Stop(); 16 Console.WriteLine("{0}: {1}", testName, stopwatch.ElapsedMilliseconds); 17 }
接下來就可以在Main方法里面調(diào)用了:
 1 static void Main() {  2     var person = new Person {  3         Id = 1,  4         Name = "Vision Ding",  5         Age = 28,  6         Gender = true,  7         Address = "廣東省廣州市天河區(qū)",  8         IDCard = "42XXXX198XXXXXXXXX"  9     }; 10     for (var i = 0; i < 10; i++) { 11         Console.WriteLine("第{0}次執(zhí)行:", i + 1); 12         PerformanceTest(person, "Json.NET", 100000, p => JsonConvert.SerializeObject(p)); 13         PerformanceTest(person, "fastJSON", 100000, p => JSON.ToJSON(p)); 14         PerformanceTest(person, "ServiceStack", 100000, p => p.ToJson()); 15     } 16 }我們循環(huán)執(zhí)行了10次,得到的結(jié)果如下(單位毫秒):
| Json.NET | fastJSON | ServiceStack.Text | |
| 1 | 480 | 342 | 406 | 
| 2 | 218 | 308 | 251 | 
| 3 | 216 | 307 | 235 | 
| 4 | 219 | 326 | 235 | 
| 5 | 220 | 310 | 251 | 
| 6 | 215 | 308 | 232 | 
| 7 | 217 | 309 | 233 | 
| 8 | 216 | 305 | 233 | 
| 9 | 216 | 306 | 233 | 
| 10 | 218 | 306 | 269 | 
從上面的執(zhí)行結(jié)果可以開出,在第一次執(zhí)行的時候fastJSON最快,Json.NET最慢,但是后面的9次剛好相反。由于每次循環(huán)都是執(zhí)行10W次序列化操作,相差不過幾十毫秒,所以這點性能差距幾乎可以忽略不計,選擇Json.NET還是很可靠的。
上面3個類庫的官方網(wǎng)站:
新聞熱點
疑難解答