Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON序列化性能问题Web API_Json_Performance_Asp.net Web Api_Json.net - Fatal编程技术网

JSON序列化性能问题Web API

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个

我们有一个asp.net web API应用程序,当调用POST API时,需要30秒才能到达API中的第一条语句。我了解从请求体中反序列化对象所花费的时间。我们使用Newtonsoft json和默认的契约解析器

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
,看看是否有帮助也无妨。