• 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页面

    <%@ 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>
    View Code

    Test.aspx.cs文件代码

    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();
            }
        }
    }
    View Code

    LoginLog表结构

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

    测试结果(早上发的时候忘记前台排列的顺序了,重新修正为以下内容)

      

      使用“SubSonic的T.GetPaged函数分页”查询是速度最快的,而“SubSonic.Query.Select查询分页”与“SubSonic的Skip和Take方法分页”的速度差不多,排在第二,由此可见SubSonic升级到3.0后,去除了一些不必要的代码瘦身后,执行效率也有了一定的提升

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

      另外附上以前弄过的SubSonic2.2测试结果,之前测试时代码没有很认真的写,测试时也比较随便,所以测出来数据不是非常确,不过2.2使用Query方式查询与SqlQuery查询的确在性能上有很大的区别

      

       

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

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

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

  • 相关阅读:
    Algs4-2.4.26无需交换的堆
    Algs4-2.4.25 计算数论
    OPNET IT Guru 学术版下载安装注册步骤(Modeler Academic Edition)
    LintCode Python 入门级题目 365.二进制有多少个1; 181.将整数A转换为B
    LintCode Python 简单级题目 491.回文数
    LintCode Python 简单级题目 2.尾部的零
    LintCode Python 困难级题目 20.骰子求和 动态规划
    LintCode Python 简单级题目 464.整数排序 II
    LintCode Python 简单级题目 165.合并两个排序链表
    LintCode Python 简单级题目 423.有效的括号序列
  • 原文地址:https://www.cnblogs.com/EmptyFS/p/3261882.html
Copyright © 2020-2023  润新知