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攻城狮,你面试过程中是否遇到过这样的问题呢:什么是事件?事件和委托的区别?既然事件作为一种特殊的委托,那么它的优势如何体现?诸如此类...你是否也曾经被问到过?你又是否都答出来了呢? ...
随机推荐
- nginx配置默认首页(index.htnl index.htm)全流程(包含遇到问题的解决)
需求: 自己有个域名,原来直接扔在了服务器的文件夹里(根据客服人员指导),自己玩了一遍nginx的安装部署等操作之后,域名的指向发生了改变,到了nginx成功的界面. 自己抱着极大的好奇心来配置ngi ...
- RB-Tree插入过程详解
红黑树具有很优秀的特性,其自平衡性特性,局部调整特性使得红黑树插入,删除,以查找,以及这些过程的内存资源的占用,的综合性能是非常高的(通常我们会拿红黑树和AVL树进行对比). 对于红黑树的这些特性,在 ...
- 浅析RPC远程过程调用基本原理
在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...
- 转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...
- MySQL中的用户与授权
grant all on *.* to root@'192.168.20.49'; grant select on *.* to root@192.168.20.49 ; -- dba 可以查询 My ...
- 详解TCP三次握手
该文pdf下载地址:三次握手.pdf
- WebSocket介绍,与Socket的区别
WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成. ——百 ...
- 最长公共子序列(POJ1458)
给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致. Sample Input: abcfbc abfcabpr ...
- bugku web web5
JSPFUCK??????答案格式CTF{**} http://123.206.87.240:8002/web5/ 字母大写 jspfuck这不是骂人吗,怎么回事啊? ·点进去看见有一个可以输入的框, ...
- Luogu4494 [HAOI2018]反色游戏 【割顶】
首先发现对于一个联通块有奇数个黑点,那么总体来说答案无解.这个很容易想,因为对每个边进行操作会同时改变两个点的颜色,异或值不变. 然后一个朴素的想法是写出异或方程进行高斯消元. 可以发现高斯消元的过程 ...