【发布时间】:2011-08-24 01:58:45
【问题描述】:
我在我的 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 秒),所以我做了一些调查,GetInstrumentListData() 中的 model.GetData() 调用一直在占用时间。根据 Intellisense,此函数首先执行数据绑定并生成 JsonResult 对象。
我想可能是因为我试图显示总共 1000 条记录(即使启用了分页并且每个视图只显示 30 条),可能需要一段时间才能将这些记录转换为 JSON,所以我减少了数量记录数增加到 10(从 1.2mb 的 JSON 数据到 12.5kb)。时间上没有区别。
这是来自 Firebug 的请求跟踪。
对正在发生的事情有什么想法吗?
编辑: @allentranks 的回答和 @AlastairPitts 的评论让我意识到它实际上是我从中获取数据的来源。源不是一个表,而是一个视图,它是由我的 DBA 从一大堆疯狂的连接中创建的。事实证明,运行查询需要 13 多秒,因此加载需要这么长时间也就不足为奇了。感谢您的帮助。
【问题讨论】:
-
InstrumentList 表有多少行? Tag 列上有索引吗?该查询表明您正在从该表中提取所有行
标签: jquery asp.net-mvc data-binding infragistics