asp.net-mvc – 为什么ASP.NET MVC默认的模型绑定器很慢?做好工作需要很长时间
|
在当前的项目中,客户要求以两种方式回答问卷的可能性:使用向导(一次一个问题)和列表(所有问题一次)以单一形式。两种方式都已经实现。 使用AJAX(这是超级快速),手册章节从数据库中加载了这些问题。目前最大的一章有230个问题(每个都有4个HTML输入字段 – 输入/文本,选择等)。如果用户选择这样的章节以列表格式回答,< form>将包含约920个字段以发布到服务器。 我正在做一个AJAX POST请求,通过jQuery的serialize方法传递数据: data: $("#questions :input").serialize()
此序列化需要207.143ms才能完成。我在Firefox中使用Firebug调试此值: console.profile();
$("#questions :input").serialize();
console.profileEnd();
再次这是超快的… 当使用以下操作方法对接收到的数据进行保湿时,会出现问题: public async Task<ActionResult> ListSaveAsync(IEnumerable<AnswerViewModel> questions) 如您所见,发布的数据是绑定到IEnumerable< AnswerViewModel>的数据。的问题。 AnswerViewModel只有4个字段来存储每个答案。 事情是,在点击“保存”按钮以在此操作方法上点击一个断点之后,需要相当长的时间(正好是10秒),也就是说,大概在模型绑定中花了10秒钟。 一件重要的事情是,我使用史蒂夫·桑德森的@Html.BeginCollectionItem helper来帮助从HTTP POST实现ViewModel集合属性。查看数据在ViewModel(Keys)中如何获取: 你知道我可以尝试做哪些优化? 我想到了4个解决方法: >仅保存修改后的问题。为此,我需要在加载列表时将每个答案值存储在数据属性中,并将其与实际值进行比较,当提交< form>正如这个人建议here。 你还建议什么? 更新1 我选择了3,并实现了一个自定义的模型绑定器:AnswerModelBinder:IModelBinder并使用它在具体的操作方法: public async Task<ActionResult> ListSaveAsync(
[ModelBinder(typeof(AnswerModelBinder))]List<AnswerViewModel> questions)
现在需要10秒才能完成只需2秒钟。 >看起来像默认模型绑定器验证检查[ModelState]对性能有很大的影响。 更新2 我刚刚经历过一次:有一个List< Guid>作为一个动作参数,通过一个$ .getJson调用只传递59个字符串需要3秒钟来触发动作方法第一行的断点。将参数类型更改为List< string>使整个事情都在眨眼间工作。 一个有趣的事实是,在动作方法中我做到了这一点: List<Guid> userIds = resources.Select(Guid.Parse).ToList(); 并转换资源列表< string>列表< Guid>瞬间。 肯定有一些bug与ASP.NET模型绑定。我只想知道是什么… (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在asp.net Gridview控件中触发的事件序列是什么?
- asp.net – 为什么我的主机(softsyshosting.com)不支持Begi
- asp.net-mvc – warns – html.helpers在项目更新后无法识别
- asp.net – 此行已经属于另一个表
- asp.net – 你如何确定哪个验证器失败?
- ASP.NET(MVC)服务图像
- asp.net-mvc-4 – 如何在一个Web应用程序中最好地组合Web A
- 在ASP.NET Web API的JSON输出中没有时间的日期
- asp.net-web-api – MaxExpansionDepth,带有最新的webapi和
- asp.net-mvc – ASP.NET MVC4路由问题
- asp.net-mvc-4 – AngularJs,DropZone.Js,MVC4 –
- asp.net-mvc – 如何在扩展方法中使用HTML帮助器
- 身份验证 – 如何为Asp.NET MVC 5创建ClaimsIden
- asp.net-mvc – 无法加载文件或程序集’Microsof
- asp.net webservice返回json的方法
- asp.net – User.GetUserId()在控制器的构造函数
- asp.net-mvc – 如何仅刷新MVC 5中的部分索引页面
- asp.net-mvc – MVC6自托管wwwroot内容返回404,I
- 在asp.net中使用eval(“”)
- asp.net – 用于验证的数据注释,至少一个必填字段
