ASP .NET MVC中的jQuery Grid Binding非常慢

时间:2011-08-24 01:58:46

标签: jquery asp.net-mvc data-binding infragistics

我在ASP .NET MVC应用程序中使用Infragistics jQuery grid。我的数据源是引用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);
}

网格需要花费很长时间才能显示(25-40秒)所以我做了一些调查,这是model.GetData() GetInstrumentListData()中的{{1}}调用,它一直在占用。根据Intellisense,此函数首先执行数据绑定并生成JsonResult对象

我想也许是因为我试图显示总共1000条记录(即使已启用分页并且每条视图只显示30条),可能需要一段时间才能将这些记录转换为JSON,因此我减少了数量记录到10(从1.2mb的JSON数据到12.5kb)。没有时间差异。

这是来自Firebug的请求跟踪 Request tracing

有关正在发生的事情的任何想法?

编辑: @allentranks的回答和@AlastairPitts评论让我意识到它实际上是我从中获取数据的来源。源不是一个表而是一个视图,它是由我的DBA从一大堆疯狂的连接中创建的。事实证明,运行查询需要13秒以上,所以难怪它需要花费很长时间才能加载。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我不确定为什么您的InstrumentLists需要在查询中订购两次。

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

这应该有效:

_db.InstrumentLists.OrderBy(x => x.Tag).ToList();

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

答案 1 :(得分:0)

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

作为附注,我想分享一个网格,每页有50条记录和11列,我收到的json数据是1.9 kb和967字节。