Json.NET、fastJSON、ServiceStack.Text简单序列化操作性能测试_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Json.NET、fastJSON、ServiceStack.Text简单序列化操作性能测试

Json.NET、fastJSON、ServiceStack.Text简单序列化操作性能测试

 2014/8/23 3:13:02  Vision_Ding  程序员俱乐部  我要评论(0)
  • 摘要:由于最近项目中需要用到JSON序列化操作,所以对JSON序列化框架做了一下对比。Json.NET(Newtonsoft.Json)是我们平常用的最多的框架,现在成为了VisualStudioWeb项目模板默认引用的库之一;fastJSON号称是最小最快的序列化工具;ServiceStack.Text是著名的StackExchange团队的开源项目。下面我们开始测试工作:测试环境:操作系统Windows8.1,CPU:IntelCorei7-3610QM,VisualStudio2013
  • 标签:.net Service net 测试 操作 JSON 性能测试 JS 序列化

由于最近项目中需要用到JSON序列化操作,所以对JSON序列化框架做了一下对比。

Json.NET(Newtonsoft.Json)是我们平常用的最多的框架,现在成为了Visual Studio Web项目模板默认引用的库之一;fastJSON号称是最小最快的序列化工具;ServiceStack.Text是著名的Stack Exchange团队的开源项目。下面我们开始测试工作:

测试环境:操作系统Windows 8.1,CPU:Intel Core i7-3610QM,Visual Studio 2013。

我们先创建一个控制台应用程序,从NuGet中添加3个库最新版本的引用。

创建一个可序列化类型:

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 }

添加一个公共方法循环执行序列化操作:

 1 /// <summary> 
 2 /// 循环执行序列化操作 
 3 /// </summary> 
 4 /// <typeparam name="T"></typeparam> 
 5 /// <param name="entity">需要执行序列化操作的实体</param> 
 6 /// <param name="testName">库的名称</param> 
 7 /// <param name="count">循环测试</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方法里面调用了:

 1 static void Main() { 
 2     var person = new Person { 
 3         Id = 1, 
 4         Name = "Vision Ding", 
 5         Age = 28, 
 6         Gender = true, 
 7         Address = "广东省广州市天河区", 
 8         IDCard = "42XXXX198XXXXXXXXX" 
 9     }; 
10     for (var i = 0; i < 10; i++) { 
11         Console.WriteLine("第{0}次执行:", 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 }

我们循环执行了10次,得到的结果如下(单位毫秒):

  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

从上面的执行结果可以开出,在第一次执行的时候fastJSON最快,Json.NET最慢,但是后面的9次刚好相反。由于每次循环都是执行10W次序列化操作,相差不过几十毫秒,所以这点性能差距几乎可以忽略不计,选择Json.NET还是很可靠的。

上面3个类库的官方网站:

  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
发表评论
用户名: 匿名