您的位置:首页 > 其它

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

2013-08-16 12:56 357 查看
  使用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页面

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐