我需要显示一个可以在视图中返回可变数量的列的数据表,因此我将Mvc 3 WebGrid绑定到List< dynamic>,如本帖的回答中所述:{{3} }
它工作正常,但速度非常慢! “令人难以置信的慢”我的意思是显示一组包含11列的15条记录需要13秒。有什么方法可以加快速度吗?我已经尝试删除寻呼机,但这没有效果。
创建List< dynamic>的代码从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条记录!数据库之旅以及数据表到List&lt; dynamic&gt;的转换不到一秒钟。下面的代码需要13秒,只是为了渲染。我究竟做错了什么?或者我只是使用List&lt; dynamic&gt;?
咆哮错误的树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
)
答案 0 :(得分:4)
我遇到了同样的问题而且非常烦人,因为我们正在加载任意数据。
修复方法是为这些列定义列和格式函数,这可以通过巨大的因子改善WebGrid性能,并且性能比没有定义格式的情况更好(基于列数)。
e.g。
IEnumerable<KeyValuePair<string, Object>> example = data.First();
foreach (var pair in example)
cols.Add(grid.Column(
columnName: pair.Key,
//Seems that specifying a formatter saves the web grid ridiculous amounts of time
format: (item => ((IDictionary<String, Object>)item.Value)[pair.Key])
));
请参阅我的小示例项目https://github.com/jamesk/MVCWebGridSpeedTest以获取速度比较和完整的示例代码。
答案 1 :(得分:2)
你有没有解决这个问题?我们放弃了WebGrid用于带有for循环的直接html表,以创建CSS样式的列标题和行数据。 @Helper函数是关键,老实说它更容易控制。表现非常好。
<table id="moduleGrid" summary="@tableSummary">
<caption>@tableCaption</caption>
<thead>
<tr>
@GridColumnHeaders()
</tr>
</thead>
<tbody>
@GridDataRows()
</tbody>
</table>