我需要顯示一個數據表,可以返回一個視圖中可變數量的列,所以我綁定Mvc 3 WebGrid到列表<動態>,正如本文回答中所述:Populate MVC Webgrid from DataTableasp.net mvc 3 webgrid綁定到列表<dynamic>是非常緩慢
它工作正常,但速度令人難以置信! 「令人難以置信的慢」我的意思是需要13秒來顯示一組15列11列的記錄。有什麼辦法可以加快速度嗎?我嘗試刪除尋呼機,但沒有任何效果。
從Ado.Net數據表創建列表<動態>的代碼如下所示。它運行速度非常快,在這裏沒有問題。
var MyList = new List<dynamic>();
foreach (DataRow row in MyTable.Rows)
{
var expando = (IDictionary<string, object>)new ExpandoObject();
foreach (string column in columnNames)
{
expando.Add(column, row[column]);
}
MyList.Add(expando);
}
問題出現在視圖中。下面的代碼需要大約13秒來呈現一組包含11列的15條記錄!到數據庫的行程和將數據錶轉換爲列表<動態>需要不到一秒的時間。下面的代碼需要13秒,只是爲了渲染。我究竟做錯了什麼?或者我只是使用列表<動態>吠叫錯誤的樹?
var grid = new WebGrid(canPage: true, rowsPerPage: Model.PageSize, canSort: false);
grid.Bind(Model.MyList, rowCount: (int)Model.RowCount, autoSortAndPage: false);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(tableStyle: "webgrid",
rowStyle: "webgrid-row",
alternatingRowStyle: "webgrid-alternating-row",
htmlAttributes: new { id = "tblSearchResults" },
firstText: "<<First",
lastText: "Last>>", mode: WebGridPagerModes.All
)
不,我從來沒有辦法讓List工作可以接受。按照你描述的同樣的解決方法創傷。 –