MVC 模型绑定在使用日期时间、十进制、GUID 和可为 null 的类型时速度很慢

本文关键字:null 类型 速度 GUID 绑定 模型 十进制 时间 日期 MVC | 更新日期: 2023-09-27 18:32:49

我目前正在处理 ASP.Net 项目中的性能问题,将数据发布回我们的服务器。数据集相当大,包含 1000 多个项目,每个项目都是同一视图模型的实例。

视图模型由 30 多个属性组成(字符串、GUID、小数、日期时间、枚举等(。我们遇到的问题是模型绑定花费了大量的时间,这将极大地影响用户体验。我们谈论一个帖子的 8-10 分钟。

我正在观看 Fiddler 中的请求,生成的 JSON 很好,请求启动得相当快。在被调用的控制器方法中放置断点时,8-10 分钟内不会命中断点。

作为调查的一部分,我剥离了视图模型,将日期时间更改为双精度,将 Guid 更改为字符串,将枚举更改为整数,将小数更改为双精度。这将数据到达控制器方法的时间缩短到大约 30 秒。我猜这与框架必须将数千个属性打包到它们的 .Net 类型中有关。

还有其他方法可以解决此问题吗? 更改视图模型中的数据类型可能会给我们带来很多问题,并且还会带来很多额外的工作。

MVC 模型绑定在使用日期时间、十进制、GUID 和可为 null 的类型时速度很慢

MVC 中的默认模型绑定器可能非常慢,因为它必须处理每个泛型模型绑定情况。它必须与反射和其他东西的碎片混在一起。也就是说,您会希望在处理相同模型的列表时更聪明一些。

我怀疑您可能必须考虑为这种情况创建自定义模型绑定器,而不是依赖默认值。

这意味着实现 IModelBinder 接口并将其分配为模型的模型绑定器。至少要调查的东西