使用Repeater.ItemDataBound vs Public函数。最棒的表演?

时间:2009-10-07 14:02:48

标签: asp.net performance

什么是最佳做法,最重要的是,哪种方法表现最佳?

我有一个转发器,我想根据数据源的值来操作html。但据我所知,有几种方法可以做到这一点:

方法#1:


HTML:

<asp:Repeater ID="rptLinks" runat="server">
    <ItemTemplate>
        <li<%#GetLiClass(Container.DataItem("lnk_external")) %>>
            <a href="<%# Container.DataItem("lnk_url") %>" target="_blank"><%#Container.DataItem("lnk_name")%></a>
        </li>
    </ItemTemplate>
</asp:Repeater>

后端:

Public Function GetLiClass(ByVal bExternal As Boolean) As String
    If bExternal Then
        Return " class=""externalLink"""
    Else
        Return ""
    End If
End Function

方法#2:


HTML:

<asp:Repeater ID="rptLinks" runat="server">
    <ItemTemplate>
        <li runat="server" id="liListElement">
            <a href="<%# Container.DataItem("lnk_url") %>" target="_blank"><%#Container.DataItem("lnk_name")%></a>
        </li>
    </ItemTemplate>
</asp:Repeater>

后端:

Protected Sub rptLinks_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptLinks.ItemDataBound

    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

        If e.Item.DataItem("lnkExternal") Then
            Dim liListElement As HtmlGenericControl = e.Item.FindControl("liListElement")
            liListElement.Attributes.Add("class", "externalLink")
        End If

    End If

End Sub

那么..哪个性能最好?

方法#1: 使用内联调用写出我想要的函数。

或方法#2 使用Repeater.ItemDataBound来操作我想要的元素。

提前致谢:)

1 个答案:

答案 0 :(得分:2)

我更喜欢第一种方法,而这正是我通常使用的方法。但是,我使用它是因为我认为代码比第二种方法更易读/可理解,因为我认为它具有更好的性能。

实际上,我怀疑方法#1可能确实具有比方法#2更好的(理论上)性能,但我怀疑在任何实际测试中是否可以可靠地测量这种差异。

你真的不应该担心它。选择您认为最易读/易懂的代码。您的应用中的任何性能瓶颈都与此选择无关。