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

时间:2021-08-04 18:51:01

  使用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>

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 = ;
//每页几条记录
int pageSize = ;
//总记录数
int total = ; 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 = ; Start();
} protected void Button2_Click(object sender, EventArgs e) {
pageIndex = total / pageSize / ; 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, , null, pageIndex, pageSize);
//统计结束
swatch.Stop();
labQuery.Text = (swatch.ElapsedMilliseconds / 1000.00).ToString(); /*
* 方法三
****************************************************************/
//swatch = new Stopwatch();
swatch.Start();
var tem = LoginLog.All().Skip((pageIndex - ) * ).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表结构

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

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

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

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

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

  

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

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

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

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

  

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

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

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

SubSonic3.0插件分页查询速度测试的更多相关文章

  1. 关于SubSonic3&period;0插件使用SqlQuery或Select查询时产生的System&period;NullReferenceException异常修复

    早上在编写执行用例时,突然爆异常System.NullReferenceException: 未将对象引用设置到对象的实例 执行代码:

  2. 关于SubSonic3&period;0插件使用SubSonic&period;Query&period;Select查询时,字段类型为tinyint时列丢失问题的Bug修复

    下午在写代码时,突然发现一个列名为Enable的字段怎么也查询不出来,开始以为可能这个名称是关键字,所以给过滤掉了,所以就将名称修改为IsEnable,问题还是一样......将名称又改为IsEnab ...

  3. 【spring boot】14&period;spring boot集成mybatis&comma;注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  4. 关于SubSonic3&period;0插件更新字符串过长引发的System&period;Data&period;SqlClient&period;SqlException的异常修复

    最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下. 打开项目解决方案,进入DEBUG模式,拿到操作的数据提 ...

  5. 关于SubSonic3&period;0插件使用实体进行更新操作时(执行T&period;Update&lpar;&rpar;或T&period;Save&lpar;&rpar;),某些列无法进行修改操作的问题处理

    SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...

  6. 从零开始编写自己的C&num;框架(6)——SubSonic3&period;0插件介绍(附源码)

    前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一 ...

  7. 关于SubSonic3&period;0插件使用Json反序列化获得的实体进行更新操作时,只能执行添加而不能执行修改(编辑)操作的处理

    由于目前开发的项目使用云计算技术,客户端只进行UI与相关事件的功能开发,而所有的计算与处理都放到了服务器端,客户端与数据库没有任何关联,所以服务器端与客户端使用我们自己开发的通讯加密方式进行,而具体的 ...

  8. SubSonic3&period;0使用存储过程查询时,不能使用output参数返回值的问题修改

    有个群友问SubSonic3.0执行存储过程时能不能使用output参数返回值,说测试过后获取不到返回值,早上有些时间所以就尝试修改了一下 首先在数据库中创建一个存储过程 CREATE PROCEDU ...

  9. sql 2012之后分页查询速度问题

    一.SQL Server 2012使用OFFSET/FETCH NEXT分页,比SQL Server 2005/2008中的RowNumber()有显著改进.今天特地作了简单测试,现将过程分享如下: ...

随机推荐

  1. DP&colon;教授逻辑学问题

    http://www.zhihu.com/question/23999095#answer-12373156问题来自知乎 2015-08-17 问题描述: 一个教授逻辑学的教授,有三个学生,而且三个学 ...

  2. Intellij自动下载导入框架包

    忽然发现intellij尽然可以自动导入 框架所需的包,而且可以选择jar包版本,瞬间发现Maven,gradle管理jar包还得写配置文件弱爆了. 以Hibernate为例: 1.ProjectSt ...

  3. Sqlserver&lowbar;判断该路径是否存在该文件

    declare @result int =0declare @path nvarchar(200)='d:\1.csv'execute master.dbo.xp_fileexist @path ,@ ...

  4. Android如何设置标题栏的高度

    转载自: http://blog.csdn.net/yuxiaohui78/article/details/8222993 新建一个styles.xml 1 <?xmlversion=&quot ...

  5. 判断UserAgent是否为手机

     , )))             {                 return true;             }             return false;         }

  6. iosclient暑期&OpenCurlyDoubleQuote;动画屋&OpenCurlyDoubleQuote;活动项目总结

        入职实习的这个公司,第一天就分配了任务.从零開始写一个网页.之前尽管了解一些前端知识.但从头开写还是遇到了非常多问题,互联网公司讲求效率,有deadline还是比較有紧迫感的,与在实验室放羊状 ...

  7. Git打标签、还原到具体标签版本代码

    1.打标签:(在需要合并的分支上先打一个标签,方便回滚) $ git tag 标签名 -----此标签将打在本地,还需要推送至远程仓库 $ git push origin 标签名 -----此步骤执行 ...

  8. Android 崩溃优化

    Android 两种崩溃 android崩溃分为Java崩溃和Nativie崩溃 java崩溃就是java代码中,出现未捕获的异常,导致程序异常退出 Native崩溃一般是因为在Native代码中访问 ...

  9. Go之viper配置

    这个模块功能强大,读取配置,命令行,监听配置改变. 堪称多面手,在k8s,docker中,都多有应用. 这套应用,主要包括cobra,pflag,viper三件套. 了解得差不多啦...:) pack ...

  10. php如何使用rabbitmq实现发布消息和消费消息(tp框架)(第一篇)

    1,默认已经安装好了rabbitmq: 参考 http://www.cnblogs.com/spicy/p/7017603.html 2,安装rabbitmq客户端: 方法1: pecl 扩展安装  ...