ZhangLiHai.Com

反射对效率的影响

2006-7-20 2:03:45

在做产品的时候,有时候需求改来改去。

预先设计好的表结构可能要经常修改。
OpenSource中的OR-Mapping工具中Hibernate/Spring认为是非常优秀的FrameWork啦,但是其效率问题一直是个瓶颈。

我们针对自己的产品特点,自己定下了几个简单的规则,来做这种简单的映射关系:

1 数据表必须是简单的数据格式;
2 数据库表与Java对象之间以及表字段与Bean的方法有一一对应关系;
3 在插入数据的时候Bean的主键必须是系统的默认值,比如数值型为0。

结合以上规则,我们来实现一个简单的持久化工具SHDAO.java

提供如下简单方法:

void save(Object obj) throws Exception;
void delete(Object obj) throws Exception;
Object find(Guid guid) throws Exception;
List query(...);

这样单表的几个简单操作就可以完全由SHDAO来实现。需要修改表的时候,按照规则修改表结构。

以下是测试结果:

测试环境:JDK1.5/MySql 4.1 /Linux


每次插入1000条数据,3次的平均数据:

JDBC : 62781毫秒
SHDAO:65187毫秒
性能损失:3.82%

读取数据3次平均记录(总数据35944条记录):

JDBC:594毫秒
SHDAO:859

性能损失:44.61%

如果读取10条或以下数据:
JDBC基本上在0毫秒左右(具体时间已经非常小了)
SHDAO消耗时间在10毫秒左右。

其实反射对于性能还是有一定影响的。

就看它是不是你的系统的瓶颈了。