C# Serialization performance in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,Newtonsoft.Json.JsonConvert and System.Text.Json.JsonSerializer.Serialize
In .net core 3.0
using System;
using System.Collections.Generic;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using System.Text;
using System.Text.Json;
using Google.Protobuf;
using System.Diagnostics;
using ConsoleApp389.Models;
namespace ConsoleApp389
{
class Program
{
static void Main(string[] args)
{
TestCostDemo();
Console.ReadLine();
}
static void TestCostDemo()
{
List<SalesOrderDetail> dataList = GetList();
StringBuilder msgBuilder = new StringBuilder();
Stopwatch sw = new Stopwatch();
//sw.Start();
//Console.WriteLine($"BinaryFormatterDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
//BinaryFormatterDemo<SalesOrderDetail>(dataList);
//sw.Stop();
//Console.WriteLine($"BinaryFormatterDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
//msgBuilder.AppendLine($"BinaryFormatterDemo cost {sw.ElapsedMilliseconds} milliseconds.");
sw.Restart();
Console.WriteLine($"NewtonJsonDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
NewtonJsonDemo<SalesOrderDetail>(dataList);
sw.Stop();
Console.WriteLine($"NewtonJsonDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
msgBuilder.AppendLine($"NewtonJsonDemo cost {sw.ElapsedMilliseconds} milliseconds.");
sw.Restart();
Console.WriteLine($"JsonSerializerDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
JsonSerializerDemo<SalesOrderDetail>(dataList);
sw.Stop();
Console.WriteLine($"JsonSerializerDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
msgBuilder.AppendLine($"JsonSerializerDemo cost {sw.ElapsedMilliseconds} milliseconds.");
string msg = msgBuilder.ToString();
Console.WriteLine(msg);
System.Diagnostics.Debug.WriteLine(msg);
}
static List<SalesOrderDetail> GetList()
{
using(AdventureWorks2017Context db=new AdventureWorks2017Context())
{
List<SalesOrderDetail> dataList = new List<SalesOrderDetail>(db.SalesOrderDetail);
return dataList;
}
}
static void BinaryFormatterDemo<T>(List<T> dataList)
{
using (FileStream fs = new FileStream($"{Guid.NewGuid().ToString().Substring(0,6)}.bin", FileMode.Create))
{
BinaryFormatter binFormatter = new BinaryFormatter();
try
{
binFormatter.Serialize(fs, dataList);
}
catch(SerializationException e)
{
Console.WriteLine($"BinaryFormatter serialize ex:{e.StackTrace}");
}
}
}
static void NewtonJsonDemo<T>(List<T> dataList)
{
try
{
string jsonString = JsonConvert.SerializeObject(dataList);
}
catch(SerializationException ex)
{
Console.WriteLine($"NewtonJson serialization ex :{ex.StackTrace}");
}
}
static void JsonSerializerDemo<T>(List<T> dataList)
{
try
{
string msJsonSerializerString = System.Text.Json.JsonSerializer.Serialize(dataList);
}
catch(SerializationException ex)
{
Console.WriteLine($"System.Text.Json.JsonSerializer ex:{ex.StackTrace}");
}
}
//static void GoogleProtoBufDemo<T>(List<T> dataList)
//{
// using (var file = File.Create("person.bin"))
// {
// ProtoBuf.Serializer.Serialize<T>(file, dataList);
// }
//}
}
}
In .net 4.8
using ConsoleApp390.Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp390
{
class Program
{
static void Main(string[] args)
{
TestCostDemo();
Console.ReadLine();
} static void TestCostDemo()
{
List<SalesOrderDetail> dataList = GetList();
StringBuilder msgBuilder = new StringBuilder();
Stopwatch sw = new Stopwatch();
//sw.Start();
//Console.WriteLine($"BinaryFormatterDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
//BinaryFormatterDemo<SalesOrderDetail>(dataList);
//sw.Stop();
//Console.WriteLine($"BinaryFormatterDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
//msgBuilder.AppendLine($"BinaryFormatterDemo cost {sw.ElapsedMilliseconds} milliseconds."); sw.Restart();
Console.WriteLine($"NewtonJsonDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
NewtonJsonDemo<SalesOrderDetail>(dataList);
sw.Stop();
Console.WriteLine($"NewtonJsonDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
msgBuilder.AppendLine($"NewtonJsonDemo cost {sw.ElapsedMilliseconds} milliseconds."); sw.Restart();
Console.WriteLine($"JsonSerializerDemo started at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
JsonSerializerDemo<SalesOrderDetail>(dataList);
sw.Stop();
Console.WriteLine($"JsonSerializerDemo stopped at {DateTime.Now.ToString("yyyyMMddHHmmssffff")}");
msgBuilder.AppendLine($"JsonSerializerDemo cost {sw.ElapsedMilliseconds} milliseconds.");
string msg = msgBuilder.ToString();
Console.WriteLine(msg);
System.Diagnostics.Debug.WriteLine(msg);
}
static List<SalesOrderDetail> GetList()
{
using (AdventureWorks2017Entities db = new AdventureWorks2017Entities())
{
List<SalesOrderDetail> dataList = new List<SalesOrderDetail>(db.SalesOrderDetails);
return dataList;
}
}
static void BinaryFormatterDemo<T>(List<T> dataList)
{
using (FileStream fs = new FileStream($"{Guid.NewGuid().ToString().Substring(0, 6)}BinFormatter.dat", FileMode.Create))
{
BinaryFormatter binFormatter = new BinaryFormatter();
try
{
binFormatter.Serialize(fs, dataList);
}
catch (SerializationException e)
{
Console.WriteLine($"BinaryFormatter serialize ex:{e.StackTrace}");
}
}
}
static void NewtonJsonDemo<T>(List<T> dataList)
{
try
{
string jsonString = JsonConvert.SerializeObject(dataList);
}
catch (SerializationException ex)
{
Console.WriteLine($"NewtonJson serialization ex :{ex.StackTrace}");
}
}
static void JsonSerializerDemo<T>(List<T> dataList)
{
try
{
string msJsonSerializerString = System.Text.Json.JsonSerializer.Serialize(dataList);
}
catch (SerializationException ex)
{
Console.WriteLine($"System.Text.Json.JsonSerializer ex:{ex.StackTrace}");
}
}
}
}
Test them in program.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApp391
{
class Program
{
static void Main(string[] args)
{
TestNet48Demo();
if(IsFirstFinished)
{
TestCore30Demo();
}
} static bool IsBusy= false; static bool IsFirstFinished = false;
static void TestNet48Demo()
{
for (int i = ; i < ; i++)
{
if (!IsBusy)
{
Console.WriteLine($"Test Net48Demo() {i}");
IsBusy = true;
Thread thread = new Thread(() =>
{
Net48Demo();
});
thread.Start();
thread.Join();
while(thread.ThreadState!=System.Threading.ThreadState.Stopped)
{} if(thread.ThreadState==System.Threading.ThreadState.Stopped)
{
IsBusy = false;
}
}
} IsFirstFinished = true;
} static void Net48Demo()
{
string net48Name = @"D:\C\ConsoleApp390\bin\Debug\ConsoleApp390.exe";
Process proc=Process.Start(net48Name);
proc.WaitForExit();
}
static void TestCore30Demo()
{
for (int i = ; i < ; i++)
{
if (!IsBusy)
{
Console.WriteLine($"Test Core30Demo() {i}");
IsBusy = true;
Thread thread = new Thread(() =>
{
Core30Demo();
});
thread.Start();
thread.Join();
while (thread.ThreadState != System.Threading.ThreadState.Stopped)
{ } if (thread.ThreadState == System.Threading.ThreadState.Stopped)
{
IsBusy = false;
}
}
}
} static void Core30Demo()
{
string core30Name = @"D:\C\ConsoleApp389\bin\Debug\netcoreapp3.0\ConsoleApp389.exe";
Process proc=Process.Start(core30Name);
proc.WaitForExit();
}
}
}
I'll list serveral executed results.
In .net NewtonJson is faster than System.Text.Json.JsonSerializer.Serialize.The validated result as below.
1.
NewtonJsonDemo cost 1290 milliseconds.
JsonSerializerDemo cost 1404 milliseconds.
2.
NewtonJsonDemo cost 1213 milliseconds.
JsonSerializerDemo cost 1814 milliseconds.
3.
NewtonJsonDemo cost 1305 milliseconds.
JsonSerializerDemo cost 1373 milliseconds.
4.
NewtonJsonDemo cost 1329 milliseconds.
JsonSerializerDemo cost 1749 milliseconds.
5.
NewtonJsonDemo cost 1234 milliseconds.
JsonSerializerDemo cost 1395 milliseconds.
While in .net core 3.0 System.Text.Json.JsonSerializer.Serialize is faster than NewtonJson.
1.
NewtonJsonDemo cost 1704 milliseconds.
JsonSerializerDemo cost 1247 milliseconds.
2.
NewtonJsonDemo cost 1596 milliseconds.
JsonSerializerDemo cost 1451 milliseconds.
3.
NewtonJsonDemo cost 1430 milliseconds.
JsonSerializerDemo cost 1221 milliseconds.
4.
NewtonJsonDemo cost 1390 milliseconds.
JsonSerializerDemo cost 1219 milliseconds.
5.
NewtonJsonDemo cost 1334 milliseconds.
JsonSerializerDemo cost 1216 milliseconds.
Totally speaking, the .net core is completely faster than .net both in NewtonJson and System.Text.Json.JsonSerializer.Serialize
The data source come from Adventureworks2017.Sales.SalesOrderDetail table which has 121317 rows .
In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .net 4.8,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds. In .core 3.0,now NewtonJsonDemo cost milliseconds.JsonSerializerDemo cost milliseconds.
C# Serialization performance in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,Newtonsoft.Json.JsonConvert and System.Text.Json.JsonSerializer.Serialize的更多相关文章
- 基础命名空间:序列化 System.Runtime.Serialization
对象通常都有状态(state),从一个对象中抽取这种状态,不论是将它存储于某地,还是通过网络传送,这种抽取动作称为“将一个对象序列化”,而反向处理过程,从一个被序列化的状态重建一个对象即为反序列化. ...
- csharp:.net 3.5 using System.Runtime.Serialization.Json read json
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”的解决办法
找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”.的解决办法站点发布后部署到了两 ...
- 重写成员“log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)”时违反了继承安全性规则
在.NET 4.0下使用最新版本的log4Net 1.2.10,会遇到下面这样的错误: 重写成员“log4net.Util.ReadOnlyPropertiesDictionary.GetObject ...
- 找不到System.Runtime.Serialization.Json的解决方案
System.ServiceModel System.ServiceModel.Web System.Runtime.Serialization 三者均要添加引用
- 引用System.Runtime.Serialization.Json
vs2012下,重新添加一次System.Runtime.Serialization的引用
- 基础命名空间:序列化_自定义序列化 System.Runtime.Serialization
( (From Msdn) 自定义序列化是控制类型的序列化和反序列化的过程,通过控制序列化,可以确保序列化兼容性.换而言之,在不中断类型核心功能的情况下,可在类型的不同版本之间序列化和反序列化. 重 ...
- System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization.dll 中发生
异常信息: “System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization. ...
- System.Runtime.Serialization.cs
ylbtech-System.Runtime.Serialization.cs 允许对象控制其自己的序列化和反序列化过程. 1.返回顶部 1. #region 程序集 mscorlib, Versio ...
随机推荐
- 微服务架构 SpringBoot(二)
第二天内容:想来想去玩个ssm小demo吧 1.创建表 2..引入相关mybatis 数据库jar: <!--mybatis --> <dependency> <grou ...
- 《Javascript设计模式与开发实践》--读书笔记
第2章 this call apply bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用. bind( ...
- NLP(十八)利用ALBERT提升模型预测速度的一次尝试
前沿 在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...
- jQuery实现电梯导航特效
功能描述: 当滚动条滑到某个位置时,显示电梯导航: 当用户滚动滚动条时,让电梯导航的选中状态和当前滚动到的区域保持一致: 当用户点击电梯导航时,滚动条滚动到被点击导航对应的区域 准备工作: 首先将jQ ...
- oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...
- CentOS 7上的系统管理之:Systemd和systemctl
参考资料: Chapter 10. Managing Services with systemd Red Hat Enterprise Linux 7 | Red Hat Customer Porta ...
- C语言程序运行时的一些细节
本章可以看作是 <Unix 环境高级编程>Ch7 的笔记. C 程序运行的开始和结束 一个可以运行的 C 语言总要有一个 main 函数,main 函数现在的完整定义是 int main( ...
- SpringBoot2 配置多数据源,整合MybatisPlus增强插件
本文源码:GitHub·点这里 || GitEE·点这里 一.项目案例简介 1.多数据简介 实际的项目中,经常会用到不同的数据库以满足项目的实际需求.随着业务的并发量的不断增加,一个项目使用多个数据库 ...
- JS---DOM---自定义属性引入和移除
总结:在html标签中添加的自定义属性, 如果想要获取这个属性的值, 需要使用getAttribute("自定义属性的名字")才能获取这个属性的值 html标签中有没有什么自带的属 ...
- Markdown: color list
Color name | hex character | Name AliceBlue #F0F8FF rgb(240, 248, 255) AntiqueWhite #FAEBD7 rgb(250, ...