Lostinet

Lostinet
随笔 - 17, 文章 - 0, 评论 - 281, 引用 - 4
数据加载中……

CSPAbstractRecord之Teddy's KB样式的性能报告.

CSPAbstractRecord之Teddy's KB样式的性能报告.

在我做CSPAbstractRecord的那段时间,我很关注博客园里的各种ORM的实现方案.
那个时候也有看过Teddy's Knowledge Base的文章:
<<再续NBear性能测试:ADO.NET, NBearV3, NHibernateV1, NBearLite, NBearLite+NBearMapping性能比较[7/26修订:已修复NBearV3的性能问题]>>
http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html
而我写AR的实现的同时,也根据它的代码, 做了一个性能测试.
虽然这不是最新的测试报告. 但是还是能反映某个角度上的情况的.

测试结果如下:

Compare small read performance of ADO.NET, ADO.NET(BetterWrite), CSPAbstractRecord(NoCacheRead).

Repeat Time = 2
2 2 1

Repeat Time = 5
6 4 3

Repeat Time = 10
9 8 12

Repeat Time = 100
141 117 92

Compare big read performance of ADO.NET, ADO.NET(BetterWrite), CSPAbstractRecord(NoCacheRead).

Repeat Time = 2
94 106 69

Repeat Time = 5
255 233 189

Repeat Time = 10
497 472 391

Repeat Time = 100
4815 4782 3824

Compare write performance of ADO.NET, ADO.NET(BetterWrite), CSPAbstractRecord(NoCacheRead).

Repeat Time = 2
12 10 14

Repeat Time = 5
29 25 33

Repeat Time = 10
61 57 65

Repeat Time = 100
661 555 721

其中BetterWrite是针对里面ADONETPerformanceTest执行INSERT/UPDATE/DELETE的SQL语句的问题的优化.

而NoCacheRead的意思是忽略其中的缓存,让read和big read能公平一点.

我觉得ADONETPerformanceTest这个名字一点都不要. 应该叫DataSetPerformanceTest才不会误导别人.

从这个测试的结果可以看出, 在加载数据方面,CSPAbstractRecord比DataSet要快很多.

而在执行INSERT/UPDATE/DELETE, CSPAbstractRecord比纯SqlClient慢一点. (我觉得Teddy应该再加一个使用SqlDataAdapter的做测试,才公平.)

而对于http://www.cnblogs.com/teddyma/archive/2007/07/26/831646.html里列出的结果,

CSPAbstractRecord在写数据库上的实现的性能已经远远超过该文章中列出的技术: NHibernateV1和NBear各版本.

但是比不上progame的TBP : http://www.cnblogs.com/progame/archive/2007/07/26/orm_performance_test.html


上一篇文章:
<<AbstractRecord 预告. (关键字 ORM,ActiveRecord,DomainModel) >>
http://www.cnblogs.com/Lostinet/archive/2007/08/15/857039.html

里面可能会存在一些误解.
AbstractRecord是一个概念.让程序员编写定义,然后让AR去自动实现它. 我想以后的编程方式很有可能就是这种类型的,程序员用一些代码描述自己的想法,让工具去帮自己实现.
CSPAbstractRecord则是在AbstractRecord的一个实现. 而且已经完成大部分功能.

不过最近我会全力去做一些事情. CSPAbstractRecord的开发会暂停, 一直到10月份左右.

--END--

 

 

posted on 2007-08-17 14:47 Lostinet 阅读(1547) 评论(10)  编辑 收藏 所属分类: WOW

评论

#1楼 [楼主]   回复  引用  查看    

测试的部分代码如下:
2007-08-17 14:50 | Lostinet      

#2楼 [楼主]   回复  引用  查看    

我也看过NHibernate的介绍.
NHibernate在web-trust-level=Medium下有另外一个实现的方案.
因为在Medium信任的情况下(大部分托管主机的情况)
Reflection,Emit(包括DynamicMethod),CodeDom,都会受到很多限制.
NHibernate的另外一个方案,肯定是性能更加差的方案.

所以,在Medium信任的情况下, NHibernate读写数据的性能就更加比不上CSPAbstractRecord了.
2007-08-17 15:01 | Lostinet      

#3楼    回复  引用  查看    

不知道你的CSPAbstractRecord能不能先放出来一个版本让我们先使用一下看看
2007-08-17 16:13 | JesseZhao      

#4楼    回复  引用  查看    

看结果真的很不错,既然已经有了测度结果就把能跑的测试代码拿出来吧.
真想知道硬编码都达不到的效果,通过CSPAbstractRecord如何达到的.
(看来我没有认真看结果,1.2到2倍的结果是看不出来了,基本就是我所说的峰值30%)
2007-08-17 16:47 | henry      

#5楼    回复  引用  查看    

严重期待
2007-08-17 17:10 | 亚历山大同志      

#6楼    回复  引用  查看    

关注
2007-08-17 17:41 | 木野狐(Neil Chen)      

#7楼    回复  引用    

从测试代码,觉得有点类似 SubSonic
2007-08-19 02:42 | shrpcn [未注册用户]

#8楼 [楼主]   回复  引用  查看    

当我去实现CSPAR的时候. 因为那时只是想增强我的Web开发框架,所以直接把代码写进CSP中去了.
一时间无法提供下载. 而我最近比较忙.
如果要把代码分离出来,弄一个可以单独运行的版本, 估计9月份可以做.

CSPAR的实现方式是生成C#代码.
下面是当时测试的代码, 版本比较老了, 而且NBTCustomer那些类的定义也很简单, 所以生成的代码也相对简单.
不过基本可以从代码中可以看出点东西.
http://www.cnblogs.com/Files/Lostinet/nbtcode.rar

----
SubSonic我也看过. 那个东西的Idea很好. 可是实现的水平有点问题.
综合测试(复制Northwind的Orders+Details),
性能竟然只是CSPAR的 1/25 .

----
更正一下对SubSonic的1/25的评论.
该测试是使用System.Transactions.TransactionScope来对SubSonic进行操作的.(无奈,它网站就是这么教的.)
去除TransactionScope,使用SharedDbConnectionScope,
得出的结果是Sonic的读取性能是CSPAR的1/5,而更新数据库性能是CSPAR的2/3.

2007-08-19 10:36 | Lostinet      

#9楼    回复  引用  查看    

无法下载,what a pity
2007-08-19 23:05 | 亚历山大同志      

#10楼    回复  引用  查看    

为了证实一下Lostinet的测试结果,因为链接不可用所以自己揣摩着写了一个来试验一下,发现果然可以比用ADO.NET去Fill DataSet快,没有用对象缓存,但是自己用缓存把能缓存的元数据都缓存下来了,基本上确实可以达到比DataSet快20%多的水平,在之前的帖子里怀疑过测试的结果,现在收回。
2007-08-20 23:27 | 亚历山大同志      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交