频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

NHibernate与Ado.Net查询速度的比较

作者: 出处:网页教学网  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-06 15:29
关 键 词:Java  NHibernate  Ado  .Net
阅读提示:想在开发中使用NHibernate,但担心在性能上的问题,对查询的速度和Ado.Net进行了一下简单的比较。过程和代码如下描述,由于了解不深,暂不做结论,希望大家给点意见。

NHibernate HQL方式 : 830 条记录, 加载时间(ms) : 3334.7952  绑定IList时间(ms) : 70.1008
Ado.Net DbDataAdapter方式 : 830 条记录; 加载时间(ms) : 40.0576  绑定IList时间(ms) : 80.1152

测试环境:WinForm方式,数据库也在本机
硬件:CPU --  1.2G AMD duron(tm)          RAM -- 384M  DDR266
软件:Windows Server 2003, Sql Server 2000,Visual Studio.Net 2005

测试代码下载http://www.cnblogs.com/Files/liuyuanhuo/NHibernateTest_Performance.rar

测试的代码是在子非鱼 NHibernate学习http://sifang2004.cnblogs.com/archive/2005/09/05/230713.aspx
NHibernate 博客园专题之一http://www.cnblogs.com/Files/sifang2004/NHibernateTest.rar中下载的示例中作修改的。

测试由两个工程组成,

一.NHibernateTest工程,仅修改两个地方

1.注释Order.hbm.xml中_Items相关的<bag元素
2.在Order.cs增加下面两个方法

/**//// <summary>
/// 使用NHibernate HQL方式查询
/// </summary>
/// <returns>IList,订单对象集合</returns>
public IList LoadAllByNHibernate()
{
IList orders = ObjectLoader.Find( " from Order ", null);
return orders;
}

/**//// <summary>
/// 使用Ado.Net DbDataAdapter方式查询
/// </summary>
/// <returns>DataTable,订单数据表</returns>
public DataTable LoadAllByAdoNet()
{
DataTable dtOrders = new DataTable();
DbConnection dbConnection = new SqlConnection();
dbConnection.ConnectionString =
@"Server=Andy\Andy;initial catalog=Northwind;User id =sa;Password=sa";
DbCommand dbCommand = new SqlCommand();
dbCommand.Connection = dbConnection;
dbCommand.CommandType = CommandType.Text;
dbCommand.CommandText = "SELECT * FROM Orders";

DbDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = dbCommand;

dataAdapter.Fill( dtOrders );
return dtOrders;
}


二.添加一个NHibernateTestUI工程,引用NHibernateTest,从NHibernateTest复制一份app.config到NHibernateTestUI,修改连接串,然后添加一个窗体类,加了两个按钮一个DataGridView, 两个按钮分别测试Ado.Net DbDataAdapter方式和NHibernate HQL方式的加载时间,测试代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace NHibernateTestUI
{    public partial class OrderFrm : Form
{
public OrderFrm()
{
InitializeComponent();
}

NHibernateTest.Order order = new NHibernateTest.Order();

/**//// <summary>
/// 使用NHibernate HQL方式查询
/// </summary>
private void btnNHLoad_Click( object sender, EventArgs e )
{
string strOutput = "";
// 测试加载数据时间
DateTime dtStart = System.DateTime.Now;
IList orders = order.LoadAllByNHibernate(); // 使用NHibernate HQL方式查询
DateTime dtEnd = System.DateTime.Now;
TimeSpan ts = dtEnd - dtStart;
strOutput += "NHibernate HQL方式 : "
+ orders.Count + " 条记录, 加载时间(ms) : "
+ ts.TotalMilliseconds;

// 测试绑定数据时间
dtStart = System.DateTime.Now;
this.dgvOrders.DataSource = orders;
dtEnd = System.DateTime.Now;
ts = dtEnd - dtStart;
strOutput += "  绑定IList时间 : " + ts.TotalMilliseconds;

Console.WriteLine( strOutput );
}

/**//// <summary>
/// 使用Ado.Net DbDataAdapter方式查询
/// </summary>
private void btnADOLoad_Click( object sender, EventArgs e )
{
string strOutput = "";
// 测试加载数据时间
DateTime dtStart = System.DateTime.Now;
DataTable dtOrders = order.LoadAllByAdoNet();  
// 使用Ado.Net DbDataAdapter方式查询
DateTime dtEnd = System.DateTime.Now;
TimeSpan ts = dtEnd - dtStart;
strOutput += "Ado.Net DbDataAdapter方式 : "
+ dtOrders.Rows.Count + " 条记录; 加载时间(ms) : "
+ ts.TotalMilliseconds;

// 测试绑定数据时间
dtStart = System.DateTime.Now;
this.dgvOrders.DataSource = dtOrders;
dtEnd = System.DateTime.Now;
ts = dtEnd - dtStart;
strOutput += "  绑定IList时间 : " + ts.TotalMilliseconds;

Console.WriteLine( strOutput );
}
}
}

运行后界面如下:

在界面两个按钮点击多次后,两者的查询时间稳定,可以作为比较。下面是输出:

NHibernate :select order0_.orderId as orderId, order0_.shippedDate as shippedD4_, order0_.shipPostalCode as shipPos10_, order0_.requiredDate as required3_, order0_.shipCountry as shipCou11_, order0_.shipVia as shipVia, order0_.orderDate as orderDate, order0_.shipAddress as shipAddr7_, order0_.shipRegion as shipRegion, order0_.shipName as shipName, order0_.shipCity as shipCity, order0_.customerId as customerId, order0_.freight as freight, order0_.employeeId as employeeId from Orders order0_
NHibernate HQL方式 : 830 条记录, 加载时间(ms) : 3334.7952  绑定IList时间 : 70.1008
NHibernate :select order0_.orderId as orderId, order0_.shippedDate as shippedD4_, order0_.shipPostalCode as shipPos10_, order0_.requiredDate as required3_, order0_.shipCountry as shipCou11_, order0_.shipVia as shipVia, order0_.orderDate as orderDate, order0_.shipAddress as shipAddr7_, order0_.shipRegion as shipRegion, order0_.shipName as shipName, order0_.shipCity as shipCity, order0_.customerId as customerId, order0_.freight as freight, order0_.employeeId as employeeId from Orders order0_
NHibernate HQL方式 : 830 条记录, 加载时间(ms) : 3304.752  绑定IList时间 : 70.1008
NHibernate :select order0_.orderId as orderId, order0_.shippedDate as shippedD4_, order0_.shipPostalCode as shipPos10_, order0_.requiredDate as required3_, order0_.shipCountry as shipCou11_, order0_.shipVia as shipVia, order0_.orderDate as orderDate, order0_.shipAddress as shipAddr7_, order0_.shipRegion as shipRegion, order0_.shipName as shipName, order0_.shipCity as shipCity, order0_.customerId as customerId, order0_.freight as freight, order0_.employeeId as employeeId from Orders order0_
NHibernate HQL方式 : 830 条记录, 加载时间(ms) : 3354.824  绑定IList时间 : 80.1152
Ado.Net DbDataAdapter方式 : 830 条记录; 加载时间(ms) : 40.0576  绑定IList时间 : 80.1152
Ado.Net DbDataAdapter方式 : 830 条记录; 加载时间(ms) : 40.0576  绑定IList时间 : 90.1296
Ado.Net DbDataAdapter方式 : 830 条记录; 加载时间(ms) : 30.0432  绑定IList时间 : 90.1296
NHibernate :select order0_.orderId as orderId, order0_.shippedDate as shippedD4_, order0_.shipPostalCode as shipPos10_, order0_.requiredDate as required3_, order0_.shipCountry as shipCou11_, order0_.shipVia as shipVia, order0_.orderDate as orderDate, order0_.shipAddress as shipAddr7_, order0_.shipRegion as shipRegion, order0_.shipName as shipName, order0_.shipCity as shipCity, order0_.customerId as customerId, order0_.freight as freight, order0_.employeeId as employeeId from Orders order0_
NHibernate HQL方式 : 830 条记录, 加载时间(ms) : 3334.7952  绑定IList时间 : 70.1008
Ado.Net DbDataAdapter方式 : 830 条记录; 加载时间(ms) : 50.072  绑定IList时间 : 90.1296

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有