asp.net mvc 3绑定到List <dynamic>的webgrid非常慢</dynamic>

时间:2013-06-26 14:01:24

标签: asp.net asp.net-mvc-3 list dynamic webgrid

我需要显示一个可以在视图中返回可变数量的列的数据表,因此我将Mvc 3 WebGrid绑定到List&lt; dynamic&gt;,如本帖的回答中所述:{{3} }

它工作正常,但速度非常慢! “令人难以置信的慢”我的意思是显示一组包含11列的15条记录需要13秒。有什么方法可以加快速度吗?我已经尝试删除寻呼机,但这没有效果。

创建List&lt; dynamic&gt;的代码从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
                )

2 个答案:

答案 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>