Web控件的效率测试

Web控件的效率测试

引言:微软在推出asp.net的同时,推出了很多附带的web控件;这些丰富的控件使得我们很容易实现一些在asp里比较难实现的效果,使得我们的开发变得很轻松,也吸引了很多初学者。但是视乎很少人考虑过web控件的执行效率,今天我们已Repeater 控件为例来测试一下Web控件的执行效率。

 

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

建立测试工程

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

HTML页面

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

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<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 "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<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样式来提升页面执行效率。

测试代码下载: https://p-blog.csdn.net/images/p_blog_csdn_net/akunshenjk/CompareRptAndDr.jpg 右键另存,将jpg改为rar,解压即可。数据库自行建立。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值