CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

这篇具有很好参考价值的文章主要介绍了CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

在 CYQ.Data 版本更新的这么多年,中间过程的版本都在完善各种功能。

基于需要支持或兼容的代码越多,很多时候,常规思维,都把相关功能完成,就结束了。

实现过程中,无法避免的会用到大量的反射、锁等对性能有所影响的逻辑代码。

CYQ.Data 从V5.9 版本开始,开始大规模的优化调整代码,目前稳定在 V5.9.2.7 版本,下面看一下更新记录

版本更新记录:

794:新增:FireBird 数据库支持:增删改查与分页。(2023-12-18)【V5.9.0.0 - V5.9.0.2795:新增:DaMeng 达梦数据库支持:增删改查与分页。(2023-12-20796:优化:FireBird 数据结构获取与转化的精准化。(2023-12-21797:优化:DaMeng 数据结构获取与转化的精准化。(2023-12-22798:新增:DaMeng : AppConfig.DB.IsDaMengUpper 配置,默认表名字段转大写。(2023-12-23799:新增:FireBird:AppConfig.DB.IsFireBirdUpper 配置,默认表名字段转大写。(2023-12-23800:优化:Postgre: AppConfig.DB.IsPostgreLower 配置,默认表名字段转小写。(2023-12-23801:新增:KingBaseES 人大金仓数据库支持:增删改查与分页。(2023-12-24802:优化:KingBaseES 数据结构获取与转化的精准化。(2023-12-25803:优化:CYQ.Data.Orm.SimpleOrm 基类。(2024-01-01804:新增:分布式锁类:DistributedLock。(2024-01-02805:优化:调整注意:CacheManage 名称变更分布式缓存:DistributedCache。(2024-01-04806:优化:调整注意:JsonHelper 名称空间由CYQ.Data.Tool 变更为:CYQ.Data.Json。(2024-01-04807:优化:增加输出标准库:.net standard2.1 版本。(2024-01-10-------------------------------------------------------------------------------------
808:优化:AppConfig.WebRootPath 路径的获取。(2024-01-13)【V5.9.0.3809:优化:SimpleOrmBase(2024-01-13810:优化:增加 AppConfig.IsDebugMode 只读属性,优化 WebRootPath 属性取值。
811:优化:内部IP获取。
-------------------------------------------------------------------------------------
812:修复:AppConfig.IsDebugMode .net 下取值。(2024-01-21)【V5.9.0.4813:新增:分布式锁增加幂等性方法。(2024-01-21814:修复:V5.9.0.3优化的内部IP获取,在Docker容器不支持的异常。 【V5.9.0.5-------------------------------------------------------------------------------------
815:优化:XHtmlAction 加载 html 速度,无实体&xxxx;内容时不加载dtd。(2024-01-25)【V5.9.0.6816:优化:AppConfig:IsNetCore 和 IsWeb 和 WebRoot 三个属性取值。(2024-01-25817:移除:【分布式锁】转移到 Taurus.DistributedLock 插件库中(增加数据库锁)。(2024-01-25818:优化:SimpleOrmBase 增加构造函数重载,允许异常时不写日志【以支持分布式数据库锁】。(2024-01-26819:优化:AppConfig 调整几个不常用的配置项【DefaultCacheTime、IsEnumToInt、JsonEscape】。(2024-01-26820:优化:DistributedCache 开放几个批量接口,以供分布式锁插件调用。(2024-01-27821:修复:SimpleOrmBase 构造函数忘了赋值链接。(2024-01-29)【V5.9.0.7-------------------------------------------------------------------------------------
822:优化:XHtmlAction 加载性能:优化缓存转化,提升2次访问速度。(2024-01-31)【V5.9.1.0823:优化:XHtmlAction 加载性能:优化取消DTD依赖、提升首次访问速度。(2024-02-01-------------------------------------------------------------------------------------
824:优化:XHtmlAction 调整方法或属性:SaveToCache 更名为RefleshCache 等。(2024-02-04)【V5.9.1.1825:移除:IField 扩展。(2024-02-04826:优化:MDataRow GetIndex,提升取值性能。(2024-02-04827:优化:ConvertTool 相关方法,提升转化性能。(2024-02-04-------------------------------------------------------------------------------------
版本简要:通过大范围使用 Emit 来替换反射,提升性能。
828:新增:CYQ.Data.Emit(内部)优化反射代码,提升性能。【V5.9.2829:新增:JsonOp 参数,调整(JsonHelper、MDataRow、MDataTable)ToJson 重载方法参数。(2024-02-06830:优化:JsonHelper 实体转化性能:涉及:ToJson(),ToList<T>()。(2024-02-052024-02-22831:优化:MDataTable 实体列表转化性能:涉及:CreateFrom。(2024-02-22832:优化:MDataRow 实体转化性能:涉及:CreateFrom。。(2024-02-22-------------------------------------------------------------------------------------
版本简要:对 XHtmlAction 进行各种简化和优化,以供 Taurus.Mvc 便于使用。
833:移除:XHtmlAction SetFor 系列方法(该方法使用门槛较高) 。(2024-02-23)【V5.9.2.1834:移除:XHtmlAction SetForeach(MDataTable dataSource, string idOrName, SetType setType) 重载方法 。(2024-02-23835:移除:XHtmlAction GetByID,GetByName 两个方法,其 Get 方法已可替代以上两者。(2024-02-23836:移除:XHtmlAction IsCurrentLang,IsUseLangSplit 两个成员属性。(2024-02-23837:移除:XHtmlBase LoadFromCache、SetCDATA、ClearCDATA 等方法。
838:优化:XHtmlAction SetForeach 方法优化,支持绑定其它数据源。(2024-02-23839:优化:XHtmlAction LoadData 方法优化,效果变更为批量对KeyValue赋值。(2024-02-23840:优化:XHtmlAction 加载:去除 http://www.w3.org/1999/xhtml 名称空间。2024-02-24)【V5.9.2.2】
-------------------------------------------------------------------------------------
版本简要:持续优化,提升性能。
840:优化:ConvertTool、ReflectTool 相关方法。(2024-02-26)【V5.9.2.3841:优化:MDataRow Load(json)。(2024-02-26842:优化:MDataTable ToList(t) 内部方法。(2024-02-26845:优化:JsonHelper(2024-02-27-------------------------------------------------------------------------------------
846:变更:将 AppConfig 中的一些和配置无关的只读属性转移到AppConst中。(2024-02-29)【V5.9.2.4847:移除:LocalEnvironment 内部类。(2024-02-29848:优化:ConvertTool.ChangeReaderToList<T> 内部类。(2024-02-29849:新增:开放:CYQ.Data.Emit.EmitPreheat 类,允许处理 Emit 委托预热。(2024-02-29-------------------------------------------------------------------------------------
版本简要:针对 Taurus.MVC 进行全方位细节进行性能优化。【V5.9.2.6850:新增:HttpRequest 扩展方法:GetHeader、GetForm、GetQuery、GetCookie 等。(2024-03-04851:优化:XHtmlAction OutXml 等多项细节优化。(2024-03-05-------------------------------------------------------------------------------------
852:新增 HttpPostedFileCreator.Create 用于创建 HttpPostedFile 实例。(因 Taurus RpcProxy 添加)(2024-03-07)【V5.9.2.7853:新增:开放几个和实体转换相关的 Emit 接口。(2024-03-08854:修正:JsonHelper.ToJson 未处理 IgnoreJson 属性标记的问题、其它优化。(2024-03-08

优化简介:

在整个优化过程,主要分为:

1、逻辑优化:

通过逻辑优化,减少代码执行。

2、减少中间商:

在过往版本,MDataTable 和 MDataRow 做为中间人,承载着所有类型转换。

通过编写直接转换,不再通过中间人进行转换,减少转换的环节。

3、Emit 代替反射:

在类型转换中,无可避免的大量的使用了反射。

为了替代大量的反射,因此编写了大量的Emit,导致工作量有点大,但为了性能,这无可避免。

4、减少锁:

在内部中,有大量用到MDicationary来缓存数据,这是一个自定义实现的线程安全的带锁的字典,曾经优化过一次,将通用锁拆分成了读写锁。

在减少锁的过程中,对于无需要 Remove 操作或 Foreach 遍历的全局数据缓存字典,将 MDicationary 换成 Dicationary,避开锁机制,对并发场景下引发的 Add 异常进行 try

5、并行执行:

对于数据量大的场景,分拆成多线程并行执行。

 

下面就来重新看一下新的测试结果:

测试环境:

本次测试为.Net Windown 版本,下次再测试.Net Core Linux 版本。

Win11 系统:6核16G内存

测试代码,基础实体类:

public class SimpleEntity
{
    public int ID { get; set; }
    public Guid MsgID { get; set; }
    public string Name { get; set; }
    public bool IsEnable { get; set; }
    public DateTime CreateTime { get; set; }
}

本次测试结果仅供参考

性能测试对比:

1、实体类转Json(执行4次):

CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

2、实体类列表(100条)转Json(执行4次):

CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

3、Json 转 Dictionary<,> (执行4次)

CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

4、Json 转 实体类(执行4次)

CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

5、Json 转 实体类列表100条数据 (执行4次) 

CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

测试结果总结:

1、在首次执行时,CYQ.Data 全面超过了 Newtonsoft.Json,差距明显,说明 Newtonsoft.Json 首次执行,性能较低,在预热这一块没有优化好。

2、在 Json 转 Dictionary 方面,CYQ.Data 有全面的优势,超过 Newtonsoft.Json。

2、在其它转换的在后续执行中,Newtonsoft.Json 和 CYQ.Data 差距不大,基本持平。

总结:

曾经有人和我说过,CYQ.Data 在 Json 这一块的转换性能不强,后来换了 Newtonsoft.Json 去操作 Json 。

那时候可能时机不成熟,要优化,需要重写的代码太多了,所以就没怎么处理。

直到今年,有个老田同学他自己写框架了,问了个他框架调用异步方法无法 try 到异常的问题:

秋天您好,请教您一个问题,您在做框架的时候是如何实现async的异常捕捉和处理的,我这里支持async的方法后反射到controller里的方法无法正常捕捉到异常,抛出自定义异常会让整个线程挂掉。

后来这问题解决了之后,我翻了下历史聊天记录,发现它曾经建议我在Taurus里把方法的反射换成委托。

从这里开始,开启了 Taurus.MVC 框架的全面优化。

然后就涉及做为底层组件的 CYQ.Data,将它进行了全面的性能优化大整改。

于是便有了如今性能优越的版本。文章来源地址https://www.toymoban.com/news/detail-841217.html

到了这里,关于CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在unity中添加Newtonsoft.Json

    在Packages-packages-lock.json中修改com.unity.collab-proxy为     \\\"com.unity.collab-proxy\\\": {       \\\"version\\\": \\\"1.5.7\\\",       \\\"depth\\\": 0,       \\\"source\\\": \\\"registry\\\",       \\\"dependencies\\\": {         \\\"com.unity.nuget.newtonsoft-json\\\": \\\"2.0.0\\\"       },       \\\"url\\\": \\\"https://packages.unity.cn\\\"     },   在Packages-manifest.json中修改

    2024年02月13日
    浏览(76)
  • 使用Newtonsoft直接读取Json格式文本(Linq to Json)

    使用 Newtonsoft.Json(通常简称为 Newtonsoft)可以轻松地处理 JSON 格式的文本。Newtonsoft.Json 是 .NET 中一个流行的 JSON 处理库,它提供了丰富的功能和灵活性。 以下是使用 Newtonsoft.Json 进行 Linq to JSON 的示例代码: 首先,你需要在项目中安装 Newtonsoft.Json 包。你可以通过 NuGet 包管理

    2024年02月16日
    浏览(59)
  • Unity中Newtonsoft.Json的使用(二)

    目录 1.JsonSerializerSettings的使用 1.1 默认值设置 1.2 空值设置 1.3 日期格式设置 2.JsonProperty的使用 2.1非公共字段序列化 2.2指定序列化字段 2.2.1 方式一 OptIn 2.2.2 方式二 OptOut 2.3 默认值设置 2.4 空值设置 2.5 日期格式设置 2.6 自定义字段名称 2.7 枚举使用String类型序列化 简单小结 上

    2024年04月13日
    浏览(45)
  • Unity中Newtonsoft.Json的使用(一)

    目录 1.介绍 1.1 什么是Json 1.2 Json和其他数据序列化方案对比 1.3 为什么选择Newtonsoft.Json 2.安装Newtonsoft.json 2.1 网上其他安装方式 2.2 Unity下载匹配的版本 3.Newtonsoft.Json的使用 3.1 写一个Json工具类进行序列化和反序列化 3.2 进行测试 简单小结 Json全名为“JavaScript Object Notation”,直

    2024年04月09日
    浏览(41)
  • Newtonsoft.Json/Json.NET忽略序列化时的意外错误

    在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列化,还是让错误冒泡并抛

    2024年03月21日
    浏览(50)
  • 怎么在unity 3D中引入Newtonsoft.Json库

    打开 Unity 编辑器。 转到菜单栏的 \\\"Window\\\"(窗口)选项,然后选择 \\\"Package Manager\\\"(包管理器)。 在 Package Manager 窗口中,选择 \\\"All\\\"(全部)选项卡。 在搜索框中输入 \\\"Json.NET\\\" 或 \\\"Newtonsoft.Json\\\" 进行搜索。                                          (注意要选择Unity Registry)

    2024年02月04日
    浏览(45)
  • Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)

    JSON文件是一种纯文本文件,用于存储数据,并且是基于JavaScript的一个子集。JSON文件通常用于存储和传输数据,以及在应用程序之间交换信息。它们以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。 JSON文件通常具有.json扩展名

    2024年02月05日
    浏览(66)
  • 怎么在unity3D工程中导入Newtonsoft.Json

    打开 Unity 编辑器。 转到菜单栏的 “Window”(窗口)选项,然后选择 “Package Manager”(包管理器) 在搜索框中输入 “Newtonsoft Json” 进行搜索。 注意:要选择Unity Registry 在搜索结果中,会看到 “Newtonsoft Json” 类似名称的项目。 单击搜索结果下方的 “Install”(安装)按钮。

    2024年02月02日
    浏览(60)
  • TDengine 压缩性能实际测试(对比 DolphinDB )

    公司项目需要,对两个国产时序数据库 TDengine 与 DolphinDB 做了压缩比测试。 测试数据来源于 TDengine 官方的性能测试工具 Benchmark。 先上结果:DolphinDB 压缩比优于 TDengine 1.65 倍 TDengine TDengine 是一款开源、云原生的时序数据库(Time Series Database),专为物联网、工业互联网、金

    2024年02月05日
    浏览(40)
  • 爆肝整理,性能测试-测试工具选型(各个对比)卷起来...

    性能测试和功能测试不同,性能测试的执行是基本功能的重复和并发,需要模拟多用户,在性能测试执行时需要监控指标参数,同时性能测试的结果不是那么显而易见,需要对数据进行分析。这些特点决定了性能测试更适合通过工具来完成。 从性能测试的定义的角度来分析,

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包