废话不多说 , 我这里直接演示两种工具10000条数据拷贝的耗时对比4.1 BeanUtils
- 测试代码
private static void beanUtil() {List<UserDO> list = DataUtil.createDataList(10000);long start = System.currentTimeMillis();List<UserDTO> dtoList = new ArrayList<>();list.forEach(userDO -> {UserDTO userDTO = new UserDTO();BeanUtils.copyProperties(userDO,userDTO);dtoList.add(userDTO);});log.info("BeanUtils cotTime: {}ms", System.currentTimeMillis() - start);}
- 结果(耗时:232ms)
20:14:24.380 [main] INFO cn.van.parameter.bean.copy.demo.BeanCopyComparedDemo - BeanUtils cotTime: 232ms
4.2 BeanCopier- 测试代码
private static void beanCopier() {// 工具类生成10w条数据List<UserDO> doList = DataUtil.createDataList(10000);long start = System.currentTimeMillis();List<UserDTO> dtoList = new ArrayList<>();doList.forEach(userDO -> {BeanCopier b = BeanCopier.create(UserDO.class, UserDTO.class, false);UserDTO userDTO = new UserDTO();b.copy(userDO, userDTO, null);dtoList.add(userDTO);});log.info("BeanCopier costTime: {}ms", System.currentTimeMillis() - start);}
- 结果(耗时:116ms)
20:15:24.380 [main] INFO cn.van.parameter.bean.copy.demo.BeanCopyComparedDemo - BeanCopier costTime: 116ms
4.3 缓存BeanCopier实例提升性能BeanCopier拷贝速度快 , 性能瓶颈出现在创建BeanCopier实例的过程中 。所以 , 把创建过的BeanCopier实例放到缓存中 , 下次可以直接获取 , 提升性能 。- 测试代码
private static void beanCopierWithCache() {List<UserDO> userDOList = DataUtil.createDataList(10000);long start = System.currentTimeMillis();List<UserDTO> userDTOS = new ArrayList<>();userDOList.forEach(userDO -> {UserDTO userDTO = new UserDTO();copy(userDO, userDTO);userDTOS.add(userDTO);});log.info("BeanCopier 加缓存后 costTime: {}ms", System.currentTimeMillis() - start);}public static void copy(Object srcObj, Object destObj) {String key = genKey(srcObj.getClass(), destObj.getClass());BeanCopier copier = null;if (!BEAN_COPIERS.containsKey(key)) {copier = BeanCopier.create(srcObj.getClass(), destObj.getClass(), false);BEAN_COPIERS.put(key, copier);} else {copier = BEAN_COPIERS.get(key);}copier.copy(srcObj, destObj, null);}private static String genKey(Class<?> srcClazz, Class<?> destClazz) {return srcClazz.getName() + destClazz.getName();}
- 结果(耗时:6ms)
20:32:31.405 [main] INFO cn.van.parameter.bean.copy.demo.BeanCopyComparedDemo - BeanCopier 加缓存后 costTime: 6ms
五、总结及源码文章插图
来源:掘金 链接:https://juejin.im/post/5dc2b293e51d456e65283e61
推荐阅读
- 在头条上怎么赚钱?告诉你五种方法,绝对干货
- 设计师 设计中应该怎么配色?本文带你成为好“色”之师
- 教你快速清除Excel工作表保护密码
- 世界上美人鱼存在还是不存在 人类变成美人鱼
- 油价|中石化回应油价“国际降你不降 你和国际不一样”:真是误解了
- 空腹有氧运动怎么做?
- 你还知道哪些中国古代神话的故事? 我国古代的神话故事你还知道哪些
- 日本|DVD光驱还没有绝迹:升级USBC接口、售价180多元
- 卫浴家居风水知识 教你赚钱的卫浴布局
- 你能成为大富翁吗?好家居风水为你创造更多财富