国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Json.NET、fastJSON、ServiceStack.Text簡單序列化操作性能測試

2019-11-17 02:57:30
字體:
供稿:網(wǎng)友

Json.NET、fastJSON、ServiceStack.Text簡單序列化操作性能測試

由于最近項目中需要用到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.NETfastJSONServiceStack.Text
1480342406
2218308251
3216307235
4219326235
5220310251
6215308232
7217309233
8216305233
9216306233
10218306269

從上面的執(zhí)行結(jié)果可以開出,在第一次執(zhí)行的時候fastJSON最快,Json.NET最慢,但是后面的9次剛好相反。由于每次循環(huán)都是執(zhí)行10W次序列化操作,相差不過幾十毫秒,所以這點性能差距幾乎可以忽略不計,選擇Json.NET還是很可靠的。

上面3個類庫的官方網(wǎng)站:

  1. Json.NET: http://json.codeplex.com/
  2. fastJSON: http://www.codeproject.com/Articles/159450/fastJSON
  3. ServiceStack.Text: https://github.com/ServiceStack/ServiceStack.Text

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 若尔盖县| 集贤县| 沂水县| 桑植县| 辉南县| 辛集市| 泰安市| 大城县| 平江县| 洛阳市| 万荣县| 建始县| 新野县| 黄梅县| 万山特区| 虹口区| 马尔康县| 武胜县| 梓潼县| 通许县| 靖远县| 西城区| 二连浩特市| 凤山县| 抚州市| 黑河市| 吉隆县| 龙井市| 赤城县| 开江县| 东莞市| 筠连县| 巴南区| 咸宁市| 普兰店市| 呼和浩特市| 延津县| 玛沁县| 揭阳市| 张北县| 柳州市|