随笔 - 13  文章 - 6 评论 - 88 trackbacks - 2
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

转载请注明出处
vs2005的html编辑器真是烂,切换到页面视图就要等几分钟

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我的标签

随笔分类

随笔档案

文章分类

Blogers link

Blogs link

最新评论

阅读排行榜

评论排行榜


下载测试示例程序(运行前请先参看压缩包里的说明文件:初始数据和修改数据库链接)

测试代码基于Teddy的ADO.NET、NBear和NHibernate简单读写性能比较中的测试代码修改.

主要修改:
1.ADO.NET的测试使用microsoft的SqlHelper.
2.测试引用的版本分别为:NBear V3.7.2.4,IBatisNet V1.6.1,NHibernate1.0.1.0 for net1.1
3.使用Stopwatch计时

说明(引用原Teddy测试一文):
本测试使用Northwind数据库的Categories、Customers和Products三个表(初始数据每个表1000条数据),测试比较ADO.NET、NBear和NHibernate的读写性能。公平起见,测试代码并没有使用太多特别框架的独有功能或缓存,在实际测试前分别都进行了预读(保证元数据等都在第一次运行时已载入)。

读测试每次循环分别读取Categories、Customers和Products三个表的全部数据,三个组件分别返回DataSet,强类型实体数组和IList,虽然返回的数据类型不同,但是,实际上都包括了对返回数据的填充操作,因此,应该是相对公平的。3个ORM对Product表数据列表都使用了1对1形式(即Product信息中包含Category信息)
结果显示NBear的性能近似于ADO.NET;NHibernate的独性能要差5倍左右。

写测试每次循环分别新建、更新并删除Categories、Customers和Products三个表中的各一条记录。ADO.NET由于是直接执行SQL的,速度最快是肯定的。NBear相比ADO.NET慢约3倍,NHibernate则大约慢2倍。

鉴于一般的系统读操作的频率远高于写操作,NBear的平均性能应该要比NHibernate好处不少。

测试并不完全,仅作参考。测试代码如有错误,请指正.

我的测试结果:nbear性能最差.(和teddy测试差距很大.黑灰色底为原Teddy测试结果)
程序以console方式运行,Release编译.运行3次.以第3次为结果.


posted on 2007-07-25 01:14 try 阅读(3712) 评论(33)  编辑 收藏 网摘 所属分类: .net

FeedBack:
沙发
  回复  引用    
#2楼 2007-07-25 14:25 xuandme[未注册用户]
怎么看也是nhibernate快啊
  回复  引用    
#3楼 2007-07-25 14:29 亚历山大同志      
NBear相比ADO.NET慢约3倍,NHibernate则大约慢2倍。

NBear的平均性能应该要比NHibernate好处不少

如果不是作者脑壳发昏了就是我脑壳秀逗了,天哪!

  回复  引用  查看    
#4楼 2007-07-25 14:31 jfan[未注册用户]
NBear好像很差
  回复  引用    
#5楼 2007-07-25 14:34 progame[未注册用户]
@亚历山大同志
作者这段话引的是Teddy的原话 不是指他自己的测试结果

  回复  引用    
#6楼[楼主] 2007-07-25 14:35 try      
@亚历山大同志
这个结论是Teddy原文中的,没看到我是灰色标注?可能不太明白我的意思,我的意思是,结论和Teddy原文中结论相反.还有请看:
测试结果:nbear性能最差.(和teddy测试差距很大.)

  回复  引用  查看    
#7楼 2007-07-25 14:43 随风流月      
为什么不测试 DLinq?虽然它只有 Beta 1。
  回复  引用  查看    
#8楼[楼主] 2007-07-25 14:45 try      
@随风流月
呵呵,机器性能限制,暂时装不了.

  回复  引用  查看    
#9楼 2007-07-25 14:55 progame[未注册用户]
很惭愧啊 我下载了代码 配置了半天 NBear和IBatis还是没能跑起来

看了测试, 对于读取, 只是填充, 并没有遍历, 意义不大
写的测试还是可以说明问题的

  回复  引用    
#10楼 2007-07-25 14:57 安贝[未注册用户]
晕,如果ado.net不在第一位,微软的开发工具也该下课了。如果说NBear和NHibernate和IbatisNet简单读写性能可以超越ado.net,那肯定是撞邪了,恭喜你,你可能破解了.net库的原代码,自己开发了一个东东。而且NBear和NHibernate和IbatisNet各有各自的优势,非要用一个点来说,那就无语了。
  回复  引用    
#11楼[楼主] 2007-07-25 15:04 try      
@progame
nbear无需加什么配置,只需要修改app.config的数据库连接.
ibats.只需修改ConsoleApplication\bin\Release\SqlMap.config中的数据库连接.
请不要删除release目录下的一些配置文件.如ConsoleApplication\bin\Release\Maps.

填充到list了,遍历的话,基本没啥影响吧.ibatis和nbear是lazy load,nhibernate我不知道是哪种load

  回复  引用  查看    
#12楼 2007-07-25 15:10 jjx      
NET Framework 3.5 June 2007 ctp 中linq to sql和 ado.net datatable之间的比较可参见这里,我个人是比较吃惊的

http://www.soho-works.net/blog/post/516.html" target="_new">http://www.soho-works.net/blog/post/516.html

  回复  引用  查看    
#13楼 2007-07-25 15:16 补丁      
按照我以前的印象,NH挺慢的...:>
  回复  引用  查看    
#14楼 2007-07-25 15:19 补丁      
真要是lazy load的话,就完全可能比ado.net快了:>
  回复  引用  查看    
#15楼 2007-07-25 15:23 补丁      
其实我一直在用NBear2.5
小巧轻便,没有干过多的事情,是个不错的小玩意
3.*虽然关注,但是不喜欢,而且...更新太频繁,折腾人...

  回复  引用  查看    
#16楼 2007-07-25 15:25 progame[未注册用户]
lazy loading只是指related实体或集合的加载不执行 但当前字段一个不会比ado.net少 所以不可能比ado.net快 如果是使用memory cache的话 不查数据库 这样才可能会快
  回复  引用    
我没有看你的具体的代码,不过,无论是什么测试,都会有局限性,只能作一个大概参考。建议大家根据自己的应用场景进行原型测试。

另外,建议使用全新发布的NBearLite进行一下测试,看看是不是性能上有不小的提升呢?
http://www.cnblogs.com/teddyma/archive/2007/07/20/825384.html" target="_new">http://www.cnblogs.com/teddyma/archive/2007/07/20/825384.html

  回复  引用  查看    
#18楼[楼主] 2007-07-25 15:37 try      
@Teddy's Knowledge Base
代码基本是基于你原来测试一文的代码.我只是新增了ibatisnet和升级下nbear的dll.

  回复  引用  查看    
#19楼[楼主] 2007-07-25 15:38 try      
@progame
这个我明白啊.但不明白要遍历干嘛?

  回复  引用  查看    
#20楼 2007-07-25 15:48 henry      
先下载下来有时间和自己的玩意比一下...
  回复  引用  查看    
#21楼 2007-07-25 16:52 progame[未注册用户]
对于列表读取来说 很多ORM并不会在读完到list就生成entities 所以只读取没意义 像我的就是在读取后仍然以datatable存放, 在遍历或根据key, index取entity时才会生成并填充属性 这个才是检查读性能的主要地方

换句话说 用多次 load single entity 来测试读性能是比较好的 而不是用load entity list来测试

  回复  引用    
#22楼 2007-07-25 16:55 progame[未注册用户]
@henry
呵呵, 我已经拿来和自己的比较了一下
Read Performance Comparison(ms)
Repeat Times:2 ADO.NET:61 NHibernate:141
tbp Repeat Times:2 use: 237
Repeat Times:4 ADO.NET:108 NHibernate:239
tbp Repeat Times:4 use: 157
Repeat Times:10 ADO.NET:293 NHibernate:545
tbp Repeat Times:10 use: 409
Repeat Times:20 ADO.NET:538 NHibernate:986
tbp Repeat Times:20 use: 762
Repeat Times:30 ADO.NET:796 NHibernate:1467
tbp Repeat Times:30 use: 1187
Write Performance Comparison(ms)
Repeat Times:40 ADO.NET:191 NHibernate:315
tbp Repeat Times:40 use: 294
Repeat Times:80 ADO.NET:385 NHibernate:669
tbp Repeat Times:80 use: 477
Repeat Times:200 ADO.NET:930 NHibernate:2448
tbp Repeat Times:200 use: 1173
Repeat Times:400 ADO.NET:1931 NHibernate:3354
tbp Repeat Times:400 use: 2573
Repeat Times:600 ADO.NET:2755 NHibernate:5196
tbp Repeat Times:600 use: 3437

其实ORM比ado.net差别就在反射这一块, 而更好地生成SQL比优化反射性能要有价值得多

  回复  引用    
#23楼 2007-07-25 17:10 RicCC
NH可以基于对象选用各种缓存方案,降低数据库压力,不知道IbatisNet怎么样,如果完全用DAL、ADO.NET方式,基于data row做缓存有什么好的方案,还是每次查询数据库?
  回复  引用    
#24楼 2007-07-25 17:12 henry      
@progame
反射这块是要取代的,少量反射损耗不严重.在填充记录就存在短时间内进行大量操作这一下子就能休现出来.组件内的对象之间的组合也是一个关键地方.如果两步都做得好基本接近ado.net.
http://www.cnblogs.com/henryfan/archive/2006/12/10/588264.html" target="_new">http://www.cnblogs.com/henryfan/archive/2006/12/10/588264.html
这里的结果应该接近ado.net,过段时间修改后在做个对比测试.感觉和NHibernate比对它有点不公平,因为我的组件的出发点和NHibernate有所不同.

  回复  引用  查看    
#25楼[楼主] 2007-07-25 17:34 try      
@RicCC
IbatisNet也有很好的缓存方案

  回复  引用  查看    
#26楼 2007-07-25 21:26 曲滨*銘龘鶽      
直接用系统原生数据库操作类的-飘过......

这种光是性能的单一 PK 有些片面

而且数据很少

比如:
内存占用、cpu占用 对于一个服务器来说也是很重要的

如果有更全面的数据就更好了

  回复  引用  查看    
#27楼 2007-07-26 12:05 小鬼[未注册用户]
很好的测试
  回复  引用    
#28楼 2007-07-26 18:02 搜索人生      
IBatisNet读取性能怎么差这么多啊?比Nhibernate还差好远呢,能给出可能原因么?
  回复  引用  查看    
#29楼 2007-07-26 18:03 搜索人生      
写入性能还可以
  回复  引用  查看    
已修复NBearV3中的性能问题:http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html" target="_new">http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html,请使用NBearV3的朋友下载最新的NBearV3.7.2.6版。
  回复  引用  查看    
#31楼 2008-03-31 09:31 GG[未注册用户]
@亚历山大同志
别人说的是平均性能,你看看读性能,Nbear比NHibernate快多了,写慢了一些,所以平均性能来看,Nbear还是不错的

  回复  引用    
#32楼 2008-11-25 18:01 王立斌      
http://tech.it168.com/n/2007-03-28/200703281722292.shtml
看看这篇文章吧,这里也提供了测试代码的下载,结果居然差别这么大。

  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 830718




历史上的今天:
2006-07-25 Lucene.net中的异常处理

相关文章:

相关链接:
.