JSON序列化性能问题Web API
我们有一个asp.net web API应用程序,当调用POST API时,需要30秒才能到达API中的第一条语句。我了解从请求体中反序列化对象所花费的时间。我们使用Newtonsoft json和默认的契约解析器JSON序列化性能问题Web API,json,performance,asp.net-web-api,json.net,Json,Performance,Asp.net Web Api,Json.net,我们有一个asp.net web API应用程序,当调用POST API时,需要30秒才能到达API中的第一条语句。我了解从请求体中反序列化对象所花费的时间。我们使用Newtonsoft json和默认的契约解析器 config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver(); Json对象有25个部门->每个部门有一个5年对象数组>每年有一个月数组(12个
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
Json对象有25个部门->每个部门有一个5年对象数组>每年有一个月数组(12个对象)->每个月有15个属性
有趣的是,性能延迟只发生在特定的环境中。虽然我的本地环境没有问题,但使用相同数据的副本。我可以尝试为newtonsoft()提出的性能改进建议,但在此之前,我预计同样的问题也会发生在我的本地服务器上
谢谢你的帮助
更新 DefaultContractResolver.DynamicDegregation在本地和其他环境中都设置为True 结果
public类模型{public string Foo{get;set;}
((JsonObjectContract)contractResolver.ResolveContract(typeof(Model))).Properties[0].ValueProvider.GetType()
DynamicValueProvider在我的本地环境和其他环境中都存在。您尝试过评测吗?结果如何?在您的计算机和特定环境中的值是多少?另外,如果您有一个属性为的简单模型,请说
公共类模型{public string Foo{get;set;}
,然后执行((JsonObjectContract)contractResolver.ResolveContract(typeof(Model)).Properties[0]。ValueProvider.GetType()
,实际的具体类型是什么?是DynamicValueProvider
,ReflectionValueProvider
还是ExpressionValueProvider
?@dbc已将结果添加到问题中,两种环境中的值相同。我没有尝试分析,因为我无法在本地复制该问题。dynamicprovider>
和ValueProvider
是Json.NET中最明显的平台+机器特定的东西,可能会影响性能。您确定您使用的是相同版本的Json.NET吗?相同的框架版本?相同的32-vs 64 it设置?如果构建和运行环境相同,我怀疑我们能提供更多帮助n在没有更多信息的情况下给出。尽管如此,如果没有更好的主意,按照的建议尝试缓存和重用静态DefaultContractResolver
,看看是否有帮助也无妨。