我花了更多时间阅读有关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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)