Repeater控件测试Web控件的执行效率

ZDNet软件频道 时间:2008-07-10 作者: | 中国IT实验室 我要评论()
本文关键词:web Repeater XML 软件
Web控件最后呈现的样式也是html代码,因此个人认为在考虑性能的情况下,我们应尽量少用web控件,多使用”asp”样式来提升页面执行效率。

测试环境:SDK2.0+vs2005+Sql2000+WindowXp

  建立测试工程:

  新建页面,使用web控件Repeater:

  HTML页面   <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

        <html XMLns" >

        <head runat="server">

            <title>使用web控件</title>

        </head>

        <body>

            <form id="form1" runat="server">

            <div>

                <asp:Repeater ID="Repeater1" runat="server">

                <ItemTemplate>

                    <%#Eval("Comp_Name") %>-<%#Eval("Comp_ID") %><br />

                </ItemTemplate>

                </asp:Repeater>

 

            </div>

            </form>

            <%=(System.Environment.TickCount-ts) %>

        </body>

        </html>
 CS文件:             protected int ts;

            protected void Page_Load(object sender, EventArgs e)

            {

                ts = Environment.TickCount;

                string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ToString();

                SqlConnection myconn = new SqlConnection(connstring);

                SqlCommand cmd = new SqlCommand("select * from TB_Info", myconn);

                myconn.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                Repeater1.DataSource = dr;

                Repeater1.DataBind();

                dr.Close();

                dr.Dispose();

                myconn.Close();

                myconn.Dispose();

 

        }
 

按F5执行:数据量约2000条,多次测试耗时在210ms附近浮动。

 新建页面,不使用web控件

        HTML代码:         <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"         <html XMLns="

        <head runat="server">

            <title>不使用web控件</title>

        </head>

        <body>

            <form id="form1" runat="server">

            <div>

            <%while (dr.Read()) { %>

              <%=dr["Comp_Name"]%>-<%=dr["Comp_ID"]%><br />

            <%  } %>

            </div>

            </form>

 

            <%

                dr.Close();

                dr.Dispose();

                myconn.Close();

                myconn.Dispose();

                 %>

            <%=(System.Environment.TickCount-ts) %>

        </body>

        </html>
 

 CS代码

            protected int ts;

            protected SqlConnection myconn;

            protected SqlDataReader dr;

            protected void Page_Load(object sender, EventArgs e)

            {

                ts = Environment.TickCount;

                string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ToString();

                myconn = new SqlConnection(connstring);

                SqlCommand cmd = new SqlCommand("select * from TB_Info", myconn);

                myconn.Open();

                dr = cmd.ExecuteReader();

            }
 

F5测试,数据量约2000条,执行时间在100MS以下。

 下面截图是多次测试的数据比较:

 Default.aspx是使用web控件的页面,Default2.aspx是未使用web控件的页面。从上图可以看出,不仅在执行效率上存在差距,而且在数据大小上也存在很大的差距。在使用web控件的时候,为了保存当前状态,我们在源代码中发现一个<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"> 该隐藏域所保存的数据量是相当大的,所有页面数据会存在差距。好,那么我们把页面的<form runat=“server”>删除,使得它不能存在上面的隐藏域,再进行测试。
 

从上图我们可以看到default.aspx页面大小变小了很多,而且速率也提升了很多,然而性能整体上还是落后于default2.aspx.而且经多次测试发现,数据量越大,该差距越明显。当数据量少时,性能相差无几,但是如果考虑同时在线人数的话,那么性能的差别又会体现出来。

总结:

有人会说default2.aspx的写法是asp写法,页面代码不能分离;没错,写法确实不怎么好看,但是效率比使用web控件的效率要高很多。web控件最后呈现的样式也是html代码,因此个人认为在考虑性能的情况下,我们应尽量少用web控件,多使用”asp”样式来提升页面执行效率。

web

Repeater

XML

软件


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134