ASP.NETMVC中的jQuery网格绑定太慢了

ASP.NETMVC中的jQuery网格绑定太慢了,jquery,asp.net-mvc,data-binding,infragistics,Jquery,Asp.net Mvc,Data Binding,Infragistics,我正在ASP.NETMVC应用程序中使用。我的数据源是一个引用SQL数据库的ADO.NET实体模型。以下是我的控制器的代码,用于设置网格并提供数据源,以便从中提取: public ActionResult Index() { var model = new GridModel(); model.DataSourceUrl = Url.Action("GetInstrumentListData"); this.InitializeGridOptions(model); re

我正在ASP.NETMVC应用程序中使用。我的数据源是一个引用SQL数据库的ADO.NET实体模型。以下是我的控制器的代码,用于设置网格并提供数据源,以便从中提取:

public ActionResult Index()
{
   var model = new GridModel();
   model.DataSourceUrl = Url.Action("GetInstrumentListData");
   this.InitializeGridOptions(model);
   return View(model);
}

public JsonResult GetInstrumentListData()
{
   var model = new GridModel();
   this.InitializeGridOptions(model);
   model.DataSource = _db.InstrumentLists.OrderBy(x => x.Tag).AsQueryable<InstrumentList>();
   return model.GetData();
}

private void InitializeGridOptions(GridModel model)
{
   Code to create columns...

   model.DefaultColumnWidth = "100px";
   model.Width = "100%";
   model.Height = "700px";

   model.Features.Add(new GridFiltering());

   var sort = new GridSorting();
   sort.Mode = SortingMode.Multiple;
   model.Features.Add(sort);

   var paging = new GridPaging();
   paging.PageSize = 30;
   model.Features.Add(paging);

   var selection = new GridSelection();
   selection.Mode = SelectionMode.Row;
   selection.MultipleSelection = true;
   model.Features.Add(selection);
}
public ActionResult Index()
{
var模型=新的GridModel();
model.DataSourceUrl=Url.Action(“GetInstrumentListData”);
此选项。初始化选项(模型);
返回视图(模型);
}
公共JsonResult GetInstrumentListData()
{
var模型=新的GridModel();
此选项。初始化选项(模型);
model.DataSource=_db.instrumentList.OrderBy(x=>x.Tag).AsQueryable();
返回model.GetData();
}
私有void初始化选项(GridModel模型)
{
创建列的代码。。。
model.DefaultColumnWidth=“100px”;
model.Width=“100%”;
model.Height=“700px”;
model.Features.Add(新的GridFiltering());
var sort=new GridSorting();
sort.Mode=SortingMode.Multiple;
model.Features.Add(排序);
var paging=new GridPaging();
paging.PageSize=30;
model.Features.Add(分页);
var selection=new GridSelection();
selection.Mode=SelectionMode.Row;
selection.MultipleSelection=true;
模型.特征.添加(选择);
}
网格需要花费很长时间才能显示(25-40秒),所以我做了一些调查,一直占用时间的是
model.GetData()
调用
GetInstrumentListData()
。根据Intellisense,此函数首先执行数据绑定并生成JsonResult对象

我认为,可能因为我试图显示总共1000条记录(即使启用了分页,并且每个视图只显示30条),所以将这些记录转换为JSON可能需要一段时间,所以我将记录数量减少到10条(JSON数据从1.2mb减少到12.5kb)。时间上没有差别

这是Firebug的请求跟踪。

对正在发生的事情有什么想法吗


编辑:@allentranks的回答和@AlastairPitts的评论让我意识到这实际上是我获取数据的来源。源代码不是一个表,而是一个视图,它是由我的DBA从一大堆疯狂的连接中创建的。结果表明,运行查询需要13秒以上的时间,所以加载这么长时间也就不足为奇了。谢谢您的帮助。

我不知道为什么您的仪器列表需要在查询中订购两次

_db.InstrumentLists.OrderBy(x => x.Tag).AsQueryable<InstrumentList>().OrderBy(x => x.Tag);

而且,您可能需要在标记列上创建一个索引,以便更快地执行查询。

从控制器返回的数据有问题(10条记录的数据量太多了。12.5kb!)。您应该检查firebug中从服务器返回的json数据。确保只接收网格所需和特定的数据。我建议为网格创建一个自定义视图模型


作为旁注,我想与大家分享一下,对于一个每页有50条记录、11列的网格,我收到的json数据是1.9KB,其967字节。

Oops,OrderBy tweep是一个复制粘贴错误,它实际上只在我的代码中出现过一次,我现在在问题帖中修复了这一错误。这不是查询,而是需要花费时间的查询,这是它后面的一行-return model.GetData()@link664:它使用延迟加载,因此在调用
.GetData()
之前,查询实际上不会执行。在@allentranks提到的
.GetData()
调用之前强制加载。
ToList()
。请参阅编辑-它是数据源。谢谢你引导我找到答案。InstrumentList表中有多少行?标记列上有索引吗?查询表明您正在从该表中提取所有行
_db.InstrumentLists.OrderBy(x => x.Tag).ToList();