c# 序列化效率比拼
前言:作为开发人员,对象的序列化经常用到,特别是在现在前后端分离 采用json 交互 ,就将原来用过的几种方式总结了下,也算是做一个记录,顺便做了下性能测试。
1:内置 JavaScriptSerializer
2:常用 Newtonsoft.Json.dll
3:第3方 Jil https://github.com/kevin-montrose/Jil
using Jil;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Web.Script.Serialization; namespace csDemo
{
class Program
{
static void Main(string[] args)
{
var sp_script = new Stopwatch();
//模拟数据源 默认10w
var dataLsit = GetData(); #region JavaScriptSerializer 添加 System.Web.Extensions引用
sp_script.Start();//开始计数
var js = new JavaScriptSerializer
{
MaxJsonLength = Int32.MaxValue //设置为int的最大值
};
js.Serialize(dataLsit);
sp_script.Stop();
Console.WriteLine("JavaScriptSerializer序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion #region Newtonsoft.Json.dll
sp_script.Restart();//停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。
JsonConvert.SerializeObject(dataLsit); ;
sp_script.Stop();
Console.WriteLine("Newtonsoft 序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion #region Jil 序列化 取出数据 output.ToString();
sp_script.Restart();
using (var output = new StringWriter())
{
JSON.Serialize(dataLsit,output ); }
sp_script.Stop();
Console.WriteLine("Jil 序列化方式序列化" + dataLsit.Count + "个对象耗时:" + sp_script.ElapsedMilliseconds + "毫秒");
#endregion
} // 测试模拟数据源 length 默认参数10w
public static dynamic GetData(int length=)
{
var lstRes = new List<dynamic>();
for (var i = ; i < length; i++)
{
var data = new
{
Name = "张三" + i,
Age = ,
IsChild = i % == ? true : false,
Test1 = DateTime.Now,
Test2 = i.ToString(),
Test3 = i.ToString(),
Test4 = i.ToString(),
Test5 = i.ToString(),
Test6 = i.ToString(),
Test7 = i.ToString(),
Test8 = i.ToString(),
Test9 = i.ToString(),
Test10 = i.ToString()
}; lstRes.Add(data);
}
return lstRes;
}
}

总结:使用过程中发现GetData方法 使用dynamic (开始使用实体类) 效率反而快一点。 特别是 Jil 更明显。
Jil 学习地址:
https://github.com/kevin-montrose/Jil
https://www.dotnetjalps.com/2015/10/convert-c-object-into-json-and-vice.html
附加 webapi :使用Jil提升Json序列化性能
https://blog.csdn.net/sqqyq/article/details/51692342
注意:jil 对序列化类型有要求:(如果是object 或者是dataset 不支持) 时间需要自定义 建议时间数据转换string 默认的格式 yyyy-MM-dd hh:mm:ss
Supported Types
Jil will only (de)serialize types that can be reasonably represented as JSON.
The following types (and any user defined types composed of them) are supported:
- Strings (including char)
- Booleans
- Integer numbers (int, long, byte, etc.)
- Floating point numbers (float, double, and decimal)
- DateTimes & DateTimeOffsets
- Note that DateTimes are converted to UTC time to allow for round-tripping, use DateTimeOffsets if you need to preserve timezone information
- See Configuration for further details
- TimeSpans
- See Configuration for further details
- Nullable types
- Enumerations
- Including [Flags]
- Guids
- Only the "D" format
- IList<T>, ICollection<T>, and IReadOnlyList<T> implementations
- IDictionary<TKey, TValue> implementations where TKey is a string or enumeration
- ISet<T>
额外笔记:
css 学习网址 :https://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/
js:http://www.ruanyifeng.com/blog/archives.html
工作记录:
页面导入exel 建议使用 js-xlsx
) 提交到后台在逻辑判断 。2次请求改成一次请求,减少中间过程序列化反序列。
js-xlsx:https://www.cnblogs.com/liuxianan/p/js-excel.html
c# 序列化效率比拼的更多相关文章
- 序列化效率比拼——谁是最后的赢家Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- 序列化效率比拼——谁是最后的赢家avaScriptSerializer方式、DataContract方式、Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- c#基础系列:序列化效率比拼——谁是最后的赢家Newtonsoft.Json
前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...
- C#序列化效率对比
原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...
- C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比
测试结果如下图: 测试结果整理后: 结论: 1.这几个工具中,protobuf-net序列化和反序列化效率是最快的 2.BinaryFormatter和Newtonsoft.Json反序列化慢的比较多 ...
- mysql limit分页查询效率比拼
1.直接使用数据库提供的SQL语句 limit M ,N SELECT * from message limit 0 , 10 ; -- 0.044 SELECT * from message lim ...
- C#扩展方法知多少
前言:上篇 序列化效率比拼——谁是最后的赢家Newtonsoft.Json 介绍了下序列化方面的知识.看过Demo的朋友可能注意到了里面就用到过泛型的扩展方法,本篇打算总结下C#扩展方法的用法.博主打 ...
- C#基础系列——委托和设计模式(二)
前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...
- C#基础系列——再也不用担心面试官问我“事件”了
前言:作为.Net攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...
随机推荐
- centos7之zabbix3.2代理(zabbix-proxy)搭建
zabbix的强大之处也在于它是分布式监控系统,对于多机房大集群情况下,肯定不是一台zabbix-server服务器来进行信息的收集等工作,就要用到代理了.在记录zabbix-proxy之前,要系统的 ...
- easyui判断下拉列表
{field:'state',title:'状态',width:100, formatter : function(value, row, index){ if (value == 0) { retu ...
- Base 64 & decodeURIComponent
Base 64 & decodeURIComponent js btoa() & atob() let obj = [{"key":"q",&q ...
- Python基础:数据类型-数字(5)
在Python中,所有的数据类型都是类,每一个变量都是类的实例. Python中有6种标准数据类型:数字(Number).字符串(String).列表(List).元组(Tuple).集合(Sets) ...
- css的寬高約束
https://blog.csdn.net/qq_26780317/article/details/80736514
- 入坑MATLAB必会的吐血总结
本渣想回过头来整理一下MATLAB的一些基本的知识(很多东西比较琐碎,应该系统的梳理梳理),下文中没有提到的,自己用help查即可. 此文用来存个档,便于回顾. 由于matlab各版本部分语法存在差异 ...
- php对某个页面设置基础认证登录设置
记录下. 对某个页面设置认证 代码最开始添加: <?php $user = 'test'; $password = '111111'; // 通过HTTP认证进行验证 if (!isset($_ ...
- vue axios使用方法
首先安装axios: cnpm install axios -save 安装成功后,在main.js页面引用: import axios from 'axios' import Qs from 'qs ...
- Mac新手入门使用教程 - Finder 技巧
1,了解MAC电脑桌面. Finder:中间DOCK栏下最左边蓝白相间的图标. DOCK栏:包括Finder.前往应用程序.创建所有应用程序的快捷方式(google浏览器等).系统偏好设置.堆栈. ...
- Hadoop-2.7.3-src 源码编译
Hadoop-2.7.3 编译 1.需要环境梳理 BUILDING JDK1.7+ maven 3.0 or later findbugs 1.3.9 protocolBuffer 2.5.0 cma ...