6

GridView、Repeater、DataList などの DataBoundControl があり、次の方法を使用してデータを表示する場合、どの方法が (パフォーマンス的に) 優れていますか?

Eval("ColumnName")

または ItemDataBound または RowDataBound イベントを次のように処理します。

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{
    // my code to display data here
}

私はコードの読みやすさの理由から 2 番目のものを好みますが、パフォーマンス上の理由から、それらは同じですか (または同じものでさえありますか)?

4

3 に答える 3

5

私も 2 番目のバージョンを好みます。私の意見では、HTMLとコードのデバッグと分離が簡単です。

この古いドキュメントImproving .NET Application Performance and Scalabilityによると、より効率的です (297 ページに記載)。

于 2010-11-04T13:51:53.033 に答える
2

Eval の方が高速である可能性があります (これはレイトバウンドであり、リフレクションを使用するため、状況によって異なります) が、DataBound-Event を使用すると、より読みやすく、将来性が高くなります。

于 2010-11-04T13:49:55.300 に答える
0

それぞれの場面で役立つと思います。eval の方法は、多くのロジックが必要ない場合に単純なことを行うための迅速かつ簡単な方法です。しかし、経験の浅いプログラマーによって悪用されているのを見てきました。

私は最近、リピーターを使用していたプロジェクトの開発を引き継ぎました。彼らは次のようなことをしていました。

    <asp:Repeater>
      <ItemTemplate>
        Field Visible = '<%# (method(dataItem.a)) %>
        Field
        Field Visible = '<%# method(Eval(dataItem.a),Eval(dataItem.b)) %>'
        Field
        Field Visible = '<%# (method(dataItem.a)) %>'
        Field Visible = '<%# (method(dataItem.b)) %>'
      </ItemTemplate>
    </asp:Repeater>

これは見てるだけで辛かった。開発者はフィールドを追加し続け、同じメソッドを呼び出して、フィールドが表示されるかどうかを確認しているように見えました。このようなものは、ItemDataBound で簡単に処理でき、維持も簡単です。また、後でコードを変更/追加する必要があることを常に想定してプログラミングする必要があります。

于 2014-03-05T16:43:11.647 に答える