2011-08-24 31 views
0

我在我的ASP .NET MVC應用程序中使用Infragistics jQuery grid。我的數據源是引用SQL數據庫的ADO .NET實體模型。下面是我的控制器代碼來設置網格,並提供數據源爲它拉離:ASP.NET MVC中的jQuery網格綁定如此緩慢

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()一直佔用。根據Intellisense,這個函數首先執行數據綁定並生成JsonResult對象

我想也許因爲我試圖顯示總共1000條記錄(即使分頁已啓用,只顯示30個視圖),可能需要一段時間才能將這些記錄轉換爲JSON,所以我減少了記錄數量爲10(從JSON數據的1.2mb到12.5kb)。時間沒有區別。

這裏是來自Firebug的請求追蹤。
Request tracing

關於發生了什麼的任何想法?

編輯: @allentranks的回答和@AlastairPitts評論讓我意識到,它其實是我從我得到的數據源。源不是一個表,而是一個視圖,它是由我的DBA從一大堆瘋狂的連接創建的。事實證明,運行查詢需要13+秒,所以不用擔心其加載時間過長。謝謝你的幫助。

+0

InstrumentList表中有多少行? 您在標籤列上有索引嗎? 查詢表明您正在從該表中提取所有行 – BlackTigerX

回答

1

我不確定爲什麼您的InstrumentLists需要在您的查詢中排序兩次。

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

這應該工作:

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

而且,你也許需要創建標籤列的索引來更快地執行查詢。

+0

糟糕,OrderBy兩次是複製和粘貼錯誤,實際上它只在我的代碼中存在一次,現在我已在問題文章中修復了這一錯誤。 – link664

+0

而不是查詢花費時間的查詢,它是在它後面的行 - 返回model.GetData() – link664

+3

@ link664:它使用延遲加載,以便查詢實際上不會被執行,直到您調用'。的GetData()'。在'.GetData()'調用.'ToList()'之前強制加載@allentranks提到。 –

0

從控制器返回的數據有問題(數據量太多,12.5kb的10條記錄!)。你應該檢查從螢火蟲服務器返回的json數據。確保您只接收所需的並且特定於網格的數據。我會建議爲網格製作自定義視圖模型。

作爲一個便箋,我想分享一個網格,每頁50個記錄和11個列,我收到的json數據是1.9 kb和967字節。