使用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="第一页" οnclick="Button1_Click" /><asp:Button ID="Button2" runat="server" Text="中间页" οnclick="Button2_Click" /><asp:Button ID="Button3" runat="server" Text="最后页" οnclick="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 = 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的Skip和Take方法分页”的速度差不多,排在第二,由此可见SubSonic升级到3.0后,去除了一些不必要的代码瘦身后,执行效率也有了一定的提升

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

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

  

SubSonic3.0插件分页查询速度测试相关推荐

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

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

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

    关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复 参考文章: (1)关于SubSonic3.0插件使用Sq ...

  3. MySQL分页查询速度慢的优化

    数据数量足够大的分页查询会变得慢,这个时候我们就需要进行优化. 优化的方法也有很多,下面简述一下我用过的一些方法. 表名:order_history 描述:某个业务的订单历史表 主要字段:unsign ...

  4. 解决MybatisPlus插件分页查询不起作用,总是查询全部数据问题

    问题描述: 在使用mybatisplus插件进行分页查询时分页参数不起作用,总是查出来全部数据. 原因分析: 查看打印的sql日志发现sql后面并没有limit条件,怀疑是缺少配置. 解决方案: 查阅 ...

  5. GDAL 2.0版本RPC校正速度测试

    GDAL2.0版本的更新日志中提到了对RPC校正的优化,今天测试了一下,发现提升的速度还是蛮快的,测试的数据是一个IRS-P5的数据. 单线程测试 首先使用一个线程进行测试,使用下面的批处理进行运行, ...

  6. 使用纯索引子查询优化MySQL的分页查询速度

    像这样的查询往往会耗费十几秒的时间 SELECT * FROM news WHERE cat_id = 4 ORDER BY id DESC LIMIT150000, 10 改进后 SELECT id ...

  7. oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...

    在我们日常开发中,分页查询是必不可少的,可以说每干后端程序猿大部分时间都是CURD,所以分页的查询也接触的不少,你们都是怎么实现的呢?前不久的一段时间,我的一个同事突然找我寻求帮助,他说他写的sql查 ...

  8. usb3.0传输速度测试软件,USB3.0与USB2.0的传输速度对比测试

    USB 3.0对多数电脑爱好者都已经不陌生,发布也有段时间了,多数朋友大概都还只知道USB 3.0接口传送数据能力比USB 2.0接口快很多,但到底有多快,可能就很少人知道了.下面小编就为大家介绍一下 ...

  9. 【mySQL】mysql数据库分页查询讨论专题

    目录 一.limit分页公式.总页数公式 1 limit分页公式 2 总页数公式 二 .Mysql的三种分页方法 1 limit m,n分页语句(低效) 2 limit m语句 (有局限) 三. 查询 ...

最新文章

  1. 递推水题 Codeforces Round #289 (Div. 2, ACM ICPC Rules) A. Maximum in Table
  2. mysql 索引类型案例_Mysql索引类型与基本用法实例分析
  3. vue上传图片组件编写
  4. Spring Cloud——基于OpenFeign调用PaddleOCR的Restful API服务解决方案
  5. 将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法(亲测)
  6. 国内芯片60个细分领域重要代表企业【收藏】
  7. [2021.07.25更新]循环冗余校验(CRC)的MATLAB实现
  8. Python day 9(6) 调试
  9. java coherence_Coherence配置默认覆盖路径
  10. python 循环添加array_python常用的基本语句介绍
  11. Java 1.1.3 修改字符串、不可变字符串
  12. CleanCodeHandbook Chapter 1: Array/String(1-16)
  13. 量化分析师的python日记_量化分析师的Python日记【第1天:谁来给我讲讲Python?】...
  14. $on与$emit实现父子跨多组件通信
  15. NI VISION视觉安装
  16. 美女视频都想下载,今天我们就来批量下载它们~
  17. Eclipse官网下载地址
  18. ubuntu 10.10五笔、rar解压及gedit乱码问题的解决
  19. 2019最全前端面试问题及答案总结
  20. UVA1626 Brackets sequence

热门文章

  1. html 读取本地xml文件,JS读取本地的XML文件
  2. 小程序怎么打出横线效果_小程序,实现字体横线滚动
  3. idea不重启就刷新项目教程
  4. 20. idea刷新项目、清除项目缓存
  5. 376页8万字大数据Hadoop存储与分析处理平台建设方案
  6. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题
  7. 第二十四节:动态加载JS和动态加载CSS
  8. 你真的会给领导发微信吗?三发三不发,不懂这6招,必被敲打
  9. SQL Server安装教程(2022年更新)
  10. js数组查找方法 find() findIndex() - Kaiqisan