【发布时间】:2016-02-01 15:59:27
【问题描述】:
我目前正在处理一个 ASP.Net 项目中的性能问题,将数据发回我们的服务器时。数据集相当大,包含 1000 多个项目,每个项目都是同一视图模型的一个实例。
视图模型包含 30 多个属性(字符串、guid、小数、日期时间、枚举等)。我们遇到的问题是模型绑定需要花费大量时间,这将极大地影响用户体验。我们谈论一个帖子 8-10 分钟。
我正在 Fiddler 中查看请求,生成的 JSON 很好,请求很快就启动了。在被调用的控制器方法中放置断点时,它不会在 8-10 分钟内被命中。
作为我调查的一部分,我剥离了视图模型,将日期时间更改为双精度值,将 Guid 更改为字符串,将枚举更改为整数,将小数更改为双精度值。这将数据到达控制器方法的时间缩短到了大约 30 秒。我猜这与框架必须将数千个属性打包到它们的 .Net 类型中有关。
还有其他方法可以解决这个问题吗?更改视图模型中的数据类型可能会给我们带来很多问题以及很多额外的工作。
【问题讨论】:
-
您正在编辑具有 30 个属性的 1000 个项目(您希望用户在一个表单中编辑 30000 个控件)。疯了!
-
数据都在一个网格中,并包含许多允许批量编辑条目的控件,但不是我希望用户这样做。这是用户要求!很少有 1000 个条目,用户实际上不必编辑所有条目,并且大多数都预先填充了不需要更改的默认值
-
那么您不应该将它们发回。使用仅包含所需属性的视图模型并将视图模型映射回数据模型
-
这并没有什么不同,因为控制器中需要返回 90% 的字段,但由于 MVC 中的反序列化和模型绑定问题,它仍然会很慢。如果您没有任何有用的内容要添加,请不要回复问题。
-
只发回更改而不是所有行怎么样。
标签: c# asp.net-mvc asp.net-mvc-4 model-binding boxing