游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

。NET性能系列文章二Newtonsoft。JsonvsSy

  微软终于追上了?
  图片来自GlennCarstensPeters〔1〕Unsplash〔2〕
  欢迎来到。NET性能系列的另一章。这个系列的特点是对。NET世界中许多不同的主题进行研究、基准和比较。正如标题所说的那样,重点在于使用最新的。NET7的性能。你将看到哪种方法是实现特定主题的最快方法,以及大量的技巧和窍门,你如何能以较低的努力最大化你的代码性能。如果你对这些主题感兴趣,请继续关注
  在这篇文章中,我们将比较两个最突出的。NET的json框架。:NewtonsoftsJson。NET〔3〕和MicrosoftsSystem。Text。Json〔4〕。
  Newtonsoft。Json是NuGet上下载量最大的软件包,下载量超过23亿。System。Text。Json稍稍落后,大约有6亿次下载。然而,我们需要考虑的是,System。Text。Json自。NETCore3。1起就默认随。NETSDK交付。既然如此,Newtonsoft似乎仍然是最受欢迎的json框架。让我们来看看,它是否能保持它的名次,或者微软是否在性能方面缓慢但肯定地领先。
  测试方案
  为了模拟现实生活中应用的真实场景,我们将测试两个主要用例。
  第一,单个大数据集的序列化和反序列化。
  第二是许多小数据集的序列化和反序列化。
  一个真实的场景也需要真实的数据。对于测试数据集,我决定使用NuGet包Bogus〔5〕。通过Bogus,我能够快速生成许多不同的用户,包括个人姓名、电子邮件、ID等。〔Params(10000)〕
  publicintCount{get;set;}
  privateListUsertestUsers;
  〔GlobalSetup〕
  publicvoidGlobalSetupstrongtoutiaooriginspanclasshighlighttextstrong
  {
  varfakernewFakerUser
  。CustomInstantiator(fnewUser(
  Guid。NewGuid,
  f。Name。FirstName,
  f。Name。LastName,
  f。Name。FullName,
  f。Internet。UserName(f。Name。FirstName,f。Name。LastName),
  f。Internet。Email(f。Name。FirstName,f。Name。LastName)
  ));
  testUsersfaker。Generate(Count);
  }
  对于基准,我们将使用每个软件包的最新版本,目前是(2022年10月):
  Newtonsoft。Json13。0。1and
  System。Text。Json7。0。0rc。2〔6〕
  序列化测试序列化大对象
  为了测试一个大对象的序列化,我们简单地使用ListUser,我们在GlobalSetup方法中设置了它。我们的基准方法看起来像这样:〔Benchmark(Baselinetrue)〕
  publicvoidNewtonsoftSerializeBigData
  Newtonsoft。Json。JsonConvert。SerializeObject(testUsers);
  〔Benchmark〕
  publicvoidMicrosoftSerializeBigData
  System。Text。Json。JsonSerializer。Serialize(testUsers);
  这些方法都使用默认的ContractResolver,它只被实例化一次,因此是两个框架中性能最好的序列化选项。如果你使用自定义的JsonSerializerSettings,注意不要多次实例化ContractResolver,否则你会降低很多性能。
  现在我们来看看结果:MethodCountMeanRatioAllocatedAllocRatioNewtonsoftSerializeBigData100007。609ms1。008。09MB1。00MicrosoftSerializeBigData100003。712ms0。493。42MB0。42
  尽管Newtonsoft在他们的第一个文档网站〔7〕上说。
  高性能:比。NET的内置JSON序列化器快
  我们可以清楚地看到,到目前为止,他们并不比内置的JSON序列化器快。至少在这个用例中是这样。让我们来看看,在其他使用情况下是否也是如此。
  序列化许多小对象
  这个用例在实际应用中比较常见,例如在RESTApis中,每个网络请求都必须处理JSON序列化数据,并且也要用JSON序列化数据进行响应。
  为了实现这个用例,我们使用之前建立的ListUser,并简单地循环通过它,同时单独序列化每个用户。〔Benchmark(Baselinetrue)〕
  publicvoidNewtonsoftSerializeMuchDatastrongtoutiaooriginspanclasshighlighttextstrong
  {
  foreach(varuserintestUsers)
  {
  Newtonsoft。Json。JsonConvert。SerializeObject(user);
  }
  }
  〔Benchmark〕
  publicvoidMicrosoftSerializeMuchDatastrongtoutiaooriginspanclasshighlighttextstrong
  {
  foreach(varuserintestUsers)
  {
  System。Text。Json。JsonSerializer。Serialize(user);
  }
  }
  在我的机器上,这个基准测试导致了以下结果:MethodCountMeanRatioAllocatedAllocRatioNewtonsoftSerializeMuchData100008。087ms1。0017。14MB1。00MicrosoftSerializeMuchData100003。944ms0。493。64MB0。21
  我们可以看到对于许多小对象来说,性能又快了近100。不仅System。Text。Json的性能比Newtonsoft快了一倍,而且堆分配的内存甚至少了5倍!正如我在以前的文章中提到的,节省堆内存甚至比速度更重要,你在这里看到了。堆内存最终将不得不被垃圾回收,这将阻塞你的整个应用程序的执行。
  反序列化测试
  在现实世界的应用中,你不仅要序列化,还要从JSON序列化的字符串中反序列化对象。在下面的基准中,我们将再次使用Bogus,创建一组用户,但这次我们要把它们序列化为一个大的字符串,用于大数据对象,并把许多小数据对象序列化为Liststring。privatestringserializedTestUsers;
  privateListstringserializedTestUsersListnew;
  〔GlobalSetup〕
  publicvoidGlobalSetupstrongtoutiaooriginspanclasshighlighttextstrong
  {
  varfakernewFakerUser
  。CustomInstantiator(fnewUser(
  Guid。NewGuid,
  f。Name。FirstName,
  f。Name。LastName,
  f。Name。FullName,
  f。Internet。UserName(f。Name。FirstName,f。Name。LastName),
  f。Internet。Email(f。Name。FirstName,f。Name。LastName)
  ));
  vartestUsersfaker。Generate(Count);
  serializedTestUsersJsonSerializer。Serialize(testUsers);
  foreach(varuserintestUsers。Select(uJsonSerializer。Serialize(u)))
  {
  serializedTestUsersList。Add(user);
  }
  }
  反序列化大对象
  第一个反序列化基准将一个大的JSON字符串反序列化为相应的。NET对象。在这种情况下,它又是ListUser,我们在前面的例子中也使用了它。〔Benchmark(Baselinetrue)〕
  publicvoidNewtonsoftDeserializeBigData
  Newtonsoft。Json。JsonConvert。DeserializeObjectListUser(serializedTestUsers);
  〔Benchmark〕
  publicvoidMicrosoftDeserializeBigData
  System。Text。Json。JsonSerializer。DeserializeListUser(serializedTestUsers);
  在我的机器上运行这些基准测试,得出以下结果:MethodCountMeanRatioAllocatedAllocRatioNewtonsoftDeserializeBigData1000021。20ms1。0010。55MB1。00MicrosoftDeserializeBigData1000012。12ms0。576。17MB0。59
  就性能而言,微软仍然远远领先于Newtonsoft。然而,我们可以看到,Newtonsoft并没有慢一半,而是慢了40左右,这在与序列化基准的直接比较中是一个进步。
  反序列化许多小对象
  本章的最后一个基准是许多小对象的反序列化。在这里,我们使用我们在上面的GlobalSetup方法中初始化的Liststring,在一个循环中反序列化数据对象:〔Benchmark(Baselinetrue)〕
  publicvoidNewtonsoftDeserializeMuchDatastrongtoutiaooriginspanclasshighlighttextstrong
  {
  foreach(varuserinserializedTestUsersList)
  {
  Newtonsoft。Json。JsonConvert。DeserializeObjectUser(user);
  }
  }
  〔Benchmark〕
  publicvoidMicrosoftDeserializeMuchDatastrongtoutiaooriginspanclasshighlighttextstrong
  {
  foreach(varuserinserializedTestUsersList)
  {
  System。Text。Json。JsonSerializer。DeserializeUser(user);
  }
  }
  其结果甚至比相关的序列化基准更令人吃惊:MethodCountMeanRatioAllocatedAllocRatioNewtonsoftDeserializeMuchData1000015。577ms1。0035。54MB1。00MicrosoftDeserializeMuchData100007。916ms0。514。8MB0。14
  在Microsofts框架下,速度又快了一倍,内存效率是惊人的7倍,比Newtonsoft还要好!
  总结
  尽管Newtonsoft在他们的文档〔8〕上说:
  高性能:比。NET的内置JSON序列化器更快
  很明显,至少从。NET7开始,Microsofts的System。Text。Json在所有测试的用例中至少快了一倍,命名为。
  序列化一个大数据集
  序列化许多小数据集
  对一个大数据集进行反序列化
  对许多小数据集进行反序列化
  所有这些都是在每个框架的默认序列化器设置下进行的。
  不仅速度快了100,而且在某些情况下,分配的内存甚至比Newtonsoft的效率高5倍以上。
  我甚至认为,可以推断出结果,目前使用System。Text。Json比Newtonsoft。Json更快。
  请记住,这些结果只对最新的。NET7有效。如果你使用的是其他版本的。NET,情况可能正好相反,Newtonsoft可能会更快。
  我希望,我的文章可以帮助你对序列化器做出选择选择,并让你对性能和基准测试的世界有一个有趣的切入点。
  如果你喜欢这个系列的文章,请一定要关注我,因为还有很多有趣的话题等着你。
  谢谢你的阅读!
  版权
  原文版权:TobiasStreng翻译版权:InCerry
  原文链接:https:medium。comtobias。strengnetperformanceseries2newtonsoftvssystemtextjson2bf43e037db0
  参考资料
  〔1〕
  GlennCarstensPeters:https:unsplash。comglenncarstenspeters?utmsourcemediumutmmediumreferral
  〔2〕
  Unsplash:https:unsplash。com?utmsourcemediumutmmediumreferral
  〔3〕
  NewtonsoftsJson。NET:https:www。newtonsoft。comjson
  〔4〕
  MicrosoftsSystem。Text。Json:https:www。nuget。orgpackagesSystem。Text。Json
  〔5〕
  Bogus:https:github。combchavezBogus
  〔6〕
  7。0。0rc。2:https:www。nuget。orgpackagesSystem。Text。Json7。0。0rc。2。22472。3
  〔7〕
  第一个文档网站:https:www。newtonsoft。comjsonhelphtmlIntroduction。htm
  〔8〕
  文档:https:www。newtonsoft。comjsonhelphtmlIntroduction。htm

送你一个中成药,把你骨缝里的陈年寒湿吸出来天气变得更冷了,一部分人是不是总是觉得身体疼痛,尤其是腰膝关节处,甚至到了晚上还会因为疼痛而翻来覆去睡不着觉,严重影响了休息和精力,那这是怎么一回事呢?在中医看来,这都是……马可新皮肤6元秒杀!双枪变萝卜!7位英雄调整已上线正式服不得了了马可波罗要变马可萝卜啦碎片商店已更新7位英雄调整已上线正式服一起来看看吧碎片商店更新有你的本命就快去兑换吧!但皮肤要选鲁班和廉颇的朋……美败诉!中芯国际这次赢得很彻底一群孤独创业的中年人团队,欢迎志同道合的同志讨论分享心得中芯国际在近日收到了来自于美加利福尼亚中区联邦地区法院的裁决书,裁决书显示,法院驳回了此前二零年中芯国际所面临的一……歌尔创始人董事长姜滨抢抓元宇宙和新能源汽车等产业机遇,推动山3月29日,第三届儒商大会在济南开幕。现场,歌尔集团创始人、董事长姜滨表示,山东是儒家文化的发源地,影响了无数投身商海的仁人志士,成为众多山东企业发展的精神根源。儒商大会已是第……2年套现457亿!资本正在加速抛弃美团作者:嘉林曾经一度野蛮扩张的美团,如今似乎遭遇了一些变故。7月14日,港交所权益披露资料显示,红杉中国创始人沈南鹏减持约2107万股美团股票,价值约39亿港元,持股……JZ二维数组中的查找二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数……李国庆卖课每人9990元教写商业计划书,靠PPT融巨资近日,微博认证账号当当创始人李国庆多次发布卖课消息。红星资本局注意到,该课程价值不菲,达9990元人,同时还限定50人。你知道3个月融资2000万的商业计划书,上面写的啥……美对华出口管制,光刻机巨头表态后,荷兰首相欧盟不应孤立中国美对华出口管制,光刻机巨头表态后,荷兰首相:欧盟不应孤立中国。美国和中国在贸易和科技领域的摩擦越来越多,为了保住美国在芯片领域的霸主地位,白宫特意出台的一系列法案,对芯片以及光……主持人伏玟晓初婚嫁北大才子,二婚嫁富二代,现34岁独自带儿子曾几何时,相亲节目大行其道,几乎每个有点家当的电视台都要有一档相亲节目。最厉害的当属《非诚勿扰》,其他的比如《百里挑一》也算火爆。就在《百里挑一》的舞台上,一个女嘉宾不仅……国乒8大主力入选!马龙陈梦领衔参加,迎战张本智和伊藤美诚2022年7月的乒乓球国际比赛安排已经出炉,其中分量最重的WTT冠军赛引发了大家的关注。国乒方面,奥运冠军马龙、陈梦领衔,总计8大主力成功入选参赛名单,而另外5位世界冠军樊振东……女排世锦赛神剧情!巴西队让二追三,逆转日本队,晋级四强10月12日凌晨,女排世锦赛8进4的比赛,巴西队与日本队的比赛,巴西队在02落后的情况下,上演了三局大逆转,以32击败日本队晋级到了四强。前两局的比赛,第一局日本队开局阶……50岁的李嘉欣与儿子共浴多次亲吻不知羞耻?我们常说男大避母,女大避父。在我们传统观念里,向来理应如此的。但是有些父母,却似乎不太能够完全理解。这样的一张照片,远远看去,不知道的,还以为这是一对恩……
英特尔XeHP北极之声计算显卡曝光7680流处理器,HBM2IT之家5月13日消息根据外媒消息,爆料者IgorWallosek展现了英特尔自研的XeHP计算显卡照片和参数。该系列显卡名为ArcticSound北极之声,暂时包含1tile……雷蛇RGB口罩将于第四季度上市,N95级别防护IT之家6月16日消息在CES2021上,雷蛇推出了一款概念级口罩ProjectHazel,该口罩自带RGB灯光,采用半透明设计,并配备了可拆卸和可充电的主动式通风器和高细菌过……游戏手机千变万化,背后都有高通身影,全新一代骁龙8实力几何?近些年来,不少手机品牌开始往细分类发展,希望能够更加有针对性地吸引对应的用户群体,其中除了线下的颜值手机代表,游戏手机也开始逐渐成为不少手机厂商追逐的热点。不光光是黑鲨、……亲自试用过,这款防脱洗发水真的值得拥有2022年初,突然开始大量掉头发,床上枕头上地上到处都是我掉的头发,可以毫不夸张地说只要我走过的地上到处都是。当时心里也害怕的,去医院检查,医生开了一堆中药,最后效果不尽人意。……00,英超冠军队悲喜2极,险酿86年惨案,热刺振奋蓝军不安随着赛程的持续推进,原本被认为本赛季无法争四的英超13冠王曼联,出人意料的挤进了欧冠区域,而当人们又一次提出自己的见解,认为滕哈格带队可以提前锁定锁定下赛季的欧冠资格时,曼联却……首发立减120元,雷蛇灵刃14锐龙版正式开售锐龙95900HIT之家6月16日消息在今年的E3发布会上,雷蛇推出新款灵刃14笔记本电脑,全新雷蛇灵刃14搭载AMD锐龙5000系列以及NVIDIARTX30系列显卡,今天正式开售起售价15……国产做不出好系统?网友用完之后感觉被打脸早在2014年,中央国家机关政府采购中心就下发相关通知,明确规定所有计算机类产品不允许安装Windows8操作系统。就在前两年,Windows正式停止了对windows7的服务……利民发布PeerlessAssassin120风冷散热器纯黑IT之家4月15日消息散热配件厂商Thermalright今日发布了PeerlessAssassin120CPU风冷散热器。这款产品采用纯黑的外观,散热鳍片、热管均进行了黑色喷……49元,中科蓝讯AB32VG1RISCV开发板发布,原生搭载IT之家6月19日消息近日,国内自主物联网操作系统(RTThread)厂商睿赛德科技联合RISCV物联网芯片公司中科蓝讯正式发布基于AB32VG1RISCV评估板,AB32VG……河南金融监管系统半月内已有6人被查保险资管迎新规13精周报一周新闻速览13精精评2022年上半年寿险公司利润榜(非上市):29家盈利,32家亏损,净利润44亿,创近年新低监管拟新规规范人身险产品信披:现金价值表、说明……五一假期将逝,快来与小火车浪漫相约吧五一小长假即将结束还在为去哪而发愁吗?别犹豫,带上家人一起跟着小火车出发吧!五一乐享假期5月1日是国际劳动节石屏米轨小火车各站点迎来大批游客……阿西克继姚明后,火箭最好的中锋,为何被贱卖并快速陨落?人生无常,大肠包小肠,只能用这句话来评论阿西克的境遇阿西克过山车式的职业生涯,包涵了太多无奈和心酸在公牛队作为一个合格的饮水机看守管理员巅峰时期在休斯顿助力火……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网