1

ビューで可変数の列を返すことができるデータ テーブルを表示する必要があるため、この投稿への回答で説明されているように、Mvc 3 WebGrid を List<dynamic> に バインドしています。

正常に動作しますが、信じられないほど遅いです。「信じられないほど遅い」とは、11 列の 15 レコードのセットを表示するのに 13 秒かかることを意味します。これをスピードアップする方法はありますか?Pager を削除しようとしましたが、効果がありません。

Ado.Net データ テーブルから List<dynamic> を作成するコードは次のようになります。非常に高速に実行されます。ここでは問題ありません。

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);
}

ビューで問題が発生します。以下のコードは、11 列の 15 レコードのセットをレンダリングするのに約 13 秒かかります! データベースへの移動とデータ テーブルの List<dynamic> への変換には 1 秒もかかりません。以下のコードは、レンダリングだけで 13 秒かかります。私は何を間違っていますか?それとも、List<dynamic> を使用して間違ったツリーを鳴らしているだけですか?

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
                )
4

2 に答える 2

4

私は同じ問題を抱えていましたが、任意のデータをロードしていたため、非常に面倒でした.

修正は、列とそれらの列のフォーマット関数を定義することです。これにより、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を参照してください。

于 2014-01-15T09:56:59.793 に答える