zoukankan      html  css  js  c++  java
  • SubSonic3.0插件分页查询速度测试

    SubSonic3.0插件分页查询速度测试

    使用SubSonic3.0一段时间了,一直都想找机会测试一下各种查询分页速度,对比一下插件的查询效率到底怎么样,所以昨天写好了测试程序,准备好1K、1W、10W、50W和100W记录的数据表,早上详细做了测试。

      本机硬件配置:

      英特尔 第三代酷睿 i5-3470(3.2GHz 四核)  华硕 P8B75-V  8G金士顿DDR3 1600MHz内存  希捷 ST1000DM003-1CH162(1T / 7200转/分)

      本机软件配置:

      Win7 + SQL2005 + VS2010

      测试方法:使用5种常用分页方式进行查询,查看第一页、中间页与最后页,然后记录查询消耗时间,每页查询10次后了平均值

             存储过程分页程序用的是网上通用版本

      测试代码:

    Test.aspx页面

    复制代码
     View Code

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Solution.Web.WebManage.Test" %>

    <!DOCTYPE html PUBLIC "-//W3C//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></title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:label ID="Label1" runat="server" text="总记录数量"></asp:label><asp:label ID="labTotle" runat="server" text="Label"></asp:label><br/>
    <asp:label ID="Label2" runat="server" text="总页面数量"></asp:label><asp:label ID="labPageSize" runat="server" text="Label"></asp:label><br/>
    </div>
    <div>
    <asp:label ID="labGetPaged" runat="server" text="Label"></asp:label><br />
    <asp:label ID="labQuery" runat="server" text="Label"></asp:label><br />
    <asp:label ID="labADO" runat="server" text="Label"></asp:label><br />
    <asp:label ID="labSql" runat="server" text="Label"></asp:label><br />
    <asp:label ID="labTime" runat="server" text="Label"></asp:label>
    <br />
    <br />
    <br />
    </div>
    <div>
    <asp:Button ID="Button1" runat="server" Text="第一页" onclick="Button1_Click" />
    <asp:Button ID="Button2" runat="server" Text="中间页" onclick="Button2_Click" />
    <asp:Button ID="Button3" runat="server" Text="最后页" onclick="Button3_Click" />
    </div>
    </form>
    </body>
    </html>

    复制代码

    Test.aspx.cs文件代码

    复制代码
     View Code

    using System;
    using System.Diagnostics;
    using System.Linq;
    using Solution.DataAccess.DataModel;
    using Solution.DataAccess.DbHelper;

    namespace Solution.Web.WebManage {
    public partial class Test : System.Web.UI.Page {
    //第几页
    int pageIndex = 1;
    //每页几条记录
    int pageSize = 10;
    //总记录数
    int total = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
    //总记录数量
    total = SqlHelper.ExecuteScalarToInt("select count(*) from LoginLog ");
    labTotle.Text = total.ToString();
    //总页面数量
    labPageSize.Text = total/pageSize + "";

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
    pageIndex = 1;

    Start();
    }

    protected void Button2_Click(object sender, EventArgs e) {
    pageIndex = total / pageSize / 2;

    Start();
    }

    protected void Button3_Click(object sender, EventArgs e)
    {
    pageIndex = total/pageSize;

    Start();
    }


    private void Start()
    {
    /*
    * 方法一
    ****************************************************************/
    //使用GetPaged分页
    var swatch = new Stopwatch();
    swatch.Start();
    var selectfun = new SelectFun();
    var dt = LoginLog.GetPaged(pageIndex, pageSize);
    //统计结束
    swatch.Stop();
    labGetPaged.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString();

    /*
    * 方法二
    ****************************************************************/
    //使用SubSonic.Query.Select查询分页
    swatch.Start();
    var dt2 = selectfun.SelectDataTable<LoginLog>(false, 0, null, pageIndex, pageSize);
    //统计结束
    swatch.Stop();
    labQuery.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString();


    /*
    * 方法三
    ****************************************************************/
    //swatch = new Stopwatch();
    swatch.Start();
    var tem = LoginLog.All().Skip((pageIndex - 1) * 10).Take(pageSize);
    //统计结束
    swatch.Stop();
    labTime.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString();

    /*
    * 方法四
    ****************************************************************/
    //使用ADO.NET查询分页
    //用于统计执行时长(耗时)
    //Stopwatch swatch = new Stopwatch();
    swatch.Start();
    int count = SqlHelper.ExecuteScalarToInt("select count(*) from LoginLog ");
    var dt3 = SqlHelper.GetPageTable(" * from LoginLog", "LoginLog", pageIndex, pageSize, count);
    //统计结束
    swatch.Stop();
    labADO.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString();

    /*
    * 方法五
    ****************************************************************/
    //使用存储过程分页
    //Stopwatch swatch = new Stopwatch();
    swatch.Start();
    var dt4 = selectfun.SelectDataTable<LoginLog>("LoginLog_Id", false, null, pageIndex, pageSize);
    //统计结束
    swatch.Stop();
    labSql.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString();
    }
    }
    }

    复制代码

    LoginLog表结构

    LoginLog表内容(数据都是随机生成插入的)

    测试结果

      

      由此可见,使用“SubSonic的T.GetPaged函数分页”查询是速度最快的,而“SubSonic.Query.Select查询分页”与“存储过分页”的速度差不多,排在第二

      而在SubSonic插件中,使用率比较高的是SubSonic.Query.Select(可以封装成泛型调用),百万记录查询在0.6秒左右还是很不错的

      另外附上以前弄过的SubSonic2.2测试结果

      

      本文章为原创内容,转载请保留下面信息。

      发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:SubSonic3.0学习群(327360708)或Email给我(1654937#qq.com),大家一起探讨,由于本人工作很繁忙,如果疑问请先留言,回复不及时也请谅解。

      想了解更多SubSonic3.0的相关问题,请观注博客:http://www.cnblogs.com/EmptyFS/

    只有将自己置空,才能装进更多的东西
     
    分类: SubSonic
  • 相关阅读:
    SQL SERVER 如何处理带字母的自增列--【叶子】
    实现对数据进行分组小计并计算合计的实例 asp.net
    sql 随笔
    事务
    游标
    触发器
    Session的生命周期
    ASP.NET 推荐书籍
    asp.net 查询本地excel 获取信息
    使用DotNetZip压缩与解压缩
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3262317.html
Copyright © 2011-2022 走看看