asp.net的MVC 3的WebGrid势必名单 是极其缓慢(asp.net mvc 3 w

2019-09-27 04:08发布

我需要显示的数据表,可以在视图中返回一个可变的列数,所以我结合的MVC 3的WebGrid到列表<动态>,如答案描述此信息: 从数据表中填充MVC的WebGrid

它工作正常,但慢得令人难以置信! 所谓“慢得令人难以置信”我的意思是需要13秒11列,以显示一组的15条记录。 有什么办法来加快这个吗? 我试图消除寻呼机但没有任何效果。

其从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秒渲染一组的15条记录与11列! 到数据库和数据表的一个列表<动态>转换行程需要不到一秒钟。 下面的代码需要13秒,只是渲染。 我究竟做错了什么? 还是我吠叫使用一个List <动态>错了?

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
                )

Answer 1:

我有同样的问题,这是很烦人的,因为我们加载了任意数据。

解决方法是定义列和格式函数为这些栏,由一个巨大的因素这改进了的WebGrid性能和性能扩展好得多(基于列数)比没有定义的格式。

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的速度比较饱满的示例代码。



Answer 2:

你有没有得到这个整理出来? 我们抛弃的WebGrid与for循环来创建CSS样式表头和行数据直线上升HTML表格。 @Helper功能是关键,而诚实是更容易控制。 性能非常不错。

            <table id="moduleGrid" summary="@tableSummary">
                <caption>@tableCaption</caption>
                <thead>
                    <tr>
                        @GridColumnHeaders()
                    </tr>
                </thead>
                <tbody>
                    @GridDataRows()
                </tbody>
            </table>


文章来源: asp.net mvc 3 webgrid bound to List is exceedingly slow