一直以来, 觉得Java的动态代理机制因为使用了反射, 所以其性能会大受影响, 所以在实际项目中用的不多, 但现在手头上有一个项目, 必须用到拦截器, 而且实现相对简单, 所有就用了动态代理. 闲来无事, 便想测试一下动态代理的性能.
说明: 说是测试,其实不是很严格, 所以测试数据也不是特别严谨的有统计意义的科学的结果.
测试环境: Mac OS10.5.5(MB404), eclipse3.4, jkd1.5, hibernate3.2
其实测试环境是一样的,所以测试数据应该是有可比性的
测试代码(好像这个说法很业余)如下:
GgSwjg表中一共有1107条数据,其中dao.find(...)可以查询出10条记录
所使用的时间如下(单位:秒)
不使用代理:
47.785, 47.881, 47.407, 47.681
使用代理:
48.544, 48.362, 47.881, 49.077
从以上统计结果,我怎么也没看出来用代理与不用代理的区别在哪儿??? 也许真的没有
说明: 说是测试,其实不是很严格, 所以测试数据也不是特别严谨的有统计意义的科学的结果.
测试环境: Mac OS10.5.5(MB404), eclipse3.4, jkd1.5, hibernate3.2
其实测试环境是一样的,所以测试数据应该是有可比性的
测试代码(好像这个说法很业余)如下:
try {
PersistentContextInitializer .init();////在初始化的时候,通过配置文件来控制是否需要代理
DBTransaction tx = PersistentContext.getDBTransactionFactory()
.getCurrentDBTransaction();
tx.begin();
IDAO dao = PersistentContext.getDAOFactory().createDefaultDAO();////如果需要代理,则获取的是dao代理
int times = (int)Math.pow(10, 4);
System.out.println("一共运行" + times + "次");
long begintime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
dao.find("from GgSwjg where yxBz = 'N'").size();
}
long endtime = System.currentTimeMillis();
System.out.print(((double)(endtime - begintime))/1000.0);
tx.commit();
} catch (DAOException e) {
tx.rollback();
e.printStackTrace();
} finally {
}
GgSwjg表中一共有1107条数据,其中dao.find(...)可以查询出10条记录
所使用的时间如下(单位:秒)
不使用代理:
47.785, 47.881, 47.407, 47.681
使用代理:
48.544, 48.362, 47.881, 49.077
从以上统计结果,我怎么也没看出来用代理与不用代理的区别在哪儿??? 也许真的没有