ADO和ORM的性能比较
测试目的:
比较ADO.NET和ORM在操作数据时的性能。由于Ado.Net直接操作数据库,性能开销最小;而ORM架构大多使用反射来获取对象属性,然后映射成数据字段,或者反过来把字段映射成属性,反射有性能上的开销。所以,本测试也说明了反射对性能的影响。
环境:
使用Client/Server架构测试。
数据库Server:Ms SQL 2005
数据库:WenDa
数 据:三张表,每张表1000条数据
Client环境:hp笔记本电脑,基本配置【CPU 1.66GHz/Mem 2.5G】
测试用例:
1. 查询:查询3张表的全部记录
2. 更新:对3张表分别执行:
a)插入一条记录
b)更新一条记录
c)删除一条记录
结果:
结果说明:【已经禁止了iBatis和NH的Cache】
ADO:使用ADO.NET来操作数据库,纯粹的SQL,没有对象
Ado.Object:使用Ado.Net操作数据库,然后转换为Domain对象
iBatis:使用iBatis.Net架构,运用反射来操作Domain对象
NH:使用NHibernate架构,运用反射来操作Domain对象
循环次数:是指for循环的次数,在每个循环中调用用例
得出的值:是运行的时间,单位是ms
查询结果比较:
| 次序 | 循环次数 | ADO | Ado.Object | iBatis | NH |
| 1 | 10 | 381 | 444 | 446 | 748 |
| 2 | 20 | 765 | 910 | 932 | 1406 |
| 3 | 50 | 1938 | 2260 | 2247 | 3450 |
| 4 | 100 | 3817 | 4395 | 4546 | 6839 |
| 5 | 150 | 5791 | 6597 | 6843 | 10227 |
| 6 | 170 | 6475 | 7325 | 7585 | 11449 |
| 7 | 230 | 8816 | 9988 | 10372 | 15536 |
| 8 | 290 | 11178 | 12362 | 12796 | 19884 |
| 9 | 400 | 15673 | 17461 | 18177 | 27188 |
| 10 | 550 | 21521 | 23467 | 25480 | 37234 |
| 11 | 800 | 31013 | 35636 | 36227 | 54157 |
更新结果比较:
| 次序 | 循环次数 | ADO | Ado.Object | iBatis | NH |
| 1 | 10 | 103 | 103 | 204 | 257 |
| 2 | 20 | 257 | 257 | 248 | 511 |
| 3 | 50 | 472 | 472 | 631 | 1263 |
| 4 | 100 | 1639 | 1639 | 1714 | 2600 |
| 5 | 150 | 1869 | 1869 | 2796 | 3838 |
| 6 | 170 | 2690 | 2690 | 2871 | 4269 |
| 7 | 230 | 3155 | 3155 | 4150 | 5764 |
| 8 | 290 | 4236 | 4236 | 5087 | 7315 |
| 9 | 400 | 6132 | 6132 | 7175 | 10424 |
| 10 | 550 | 8259 | 8259 | 9301 | 14159 |
| 11 | 800 | 12206 | 12206 | 13633 | 20405 |
综合比较:
| ADO | Ado.Object | iBatis | NH | |
| read | 38.76101083 | 43.62635379 | 45.36137184 | 67.91263538 |
| write | 14.80794224 | 14.80794224 | 17.2599278 | 25.56137184 |
| avg | 29.61093863 | 32.61772058 | 34.62662022 | 51.73445271 |
结论:
ADO >> Ado.Object ≈ iBatis >> NHibernate
1. 反射的影响不大,基本上微不足道
2. NHibernate性能低,是因为级联查询和更新



浙公网安备 33010602011771号