栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何提高.Net中的JSON反序列化速度?(JSON.net还是其他?)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何提高.Net中的JSON反序列化速度?(JSON.net还是其他?)

我花了更多时间阅读有关JSON.NET内部的信息,我的结论是,速度缓慢主要是由 反射 引起的。

在JSON.NET站点上,我发现了一些不错的性能提示,并且尝试了几乎所有方法(JObject.Parse,自定义转换器等),但是我无法实现任何显着的性能改进。然后,我阅读了整个网站上最重要的说明:

如果性能很重要,并且您不介意获得更多代码,那么这是您的最佳选择。在此处阅读有关使用JsonReader / JsonWriter的更多信息

因此,我听了建议,并实现了JsonReader的基本版本以有效地读取字符串:

var reader = new JsonTextReader(new StringReader(jsonString));var response = new GetRoomListResponse();var currentProperty = string.Empty;while (reader.Read()){    if (reader.Value != null)    {        if (reader.TokenType == JsonToken.PropertyName) currentProperty = reader.Value.ToString();        if (reader.TokenType == JsonToken.Integer && currentProperty == "Acknowledge") response.Acknowledge = (AcknowledgeType)Int32.Parse(reader.Value.ToString());        if (reader.TokenType == JsonToken.Integer && currentProperty == "Code") response.Code = Int32.Parse(reader.Value.ToString());        if (reader.TokenType == JsonToken.String && currentProperty == "Message") response.Message = reader.Value.ToString();        if (reader.TokenType == JsonToken.String && currentProperty == "Exception") response.Exception = reader.Value.ToString();        // Process Rooms and other stuff    }    else    {        // Process tracking the current nested element    }}

我认为练习很清楚, 毫无疑问,这是您可以从JSON.NET中获得的最佳性能

仅此有限的代码比

Deserialize
我有500个房间的盒子上的版本快12倍,但是映射当然没有完成。但是,我很确定在最坏的情况下它至少比反序列化快5倍。

查看此链接,以获取有关JsonReader以及如何使用它的更多信息:

http://james.newtonking.com/json/help/html/ReadingWritingJSON.htm



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号