优化场景:

项目的实体类主要分为三种:dto、dao、query等,所以属性copy避免不了,是影响代码执行效率的主要方面之一。
当时的情况是,项目A接受url请求,然后会调用项目B的一个接口去处理明细数据(参数传递主数据,一条主数据对应多条明细数据),项目B处理数据的过程中涉及到属性的copy,而且是循环处理的(循环主数据),当项目A传入项目B的主数据比较多时,那么项目B处理的时间就比较长,而我们这边的服务与服务之间的调用是有时间限制的(我们这是30秒,一个接口处理时间超过30秒已经很长了,用户体验绝对是很差的),所以就会抛出超时的异常。
经过接口监控排查,发现耗时最长的地方就是属性的copy。

优化的解决方案:

1、使用BeanCopier替换BeanCopy
2、使用并行流替换for
下面是优化过程中的注意事项:

使用BeanCopier替换BeanCopy:
1、数据量小用谁都行,数据量大使用BeanCopier。当数据量比较小的情况下,这两种属性的copy效率差不多,但是当数据量大了,BeanCopier效率远超BeanCopy;
2、使用BeanCopier的时候,需要注意,两个实体类之间相同属性的数据类型一定要一样,否则就无法copy,比如int和Integer就无法正常copy;
3、针对2的问题,可以使用Converter来进行转换,但是如果使用了useConverter,那么BeanCopier就会只按照useConverter的规则进行属性copy。所以在写创建一个实体类的时候,最好使用统一的数据类型,这也是一个良好的编程习惯。
另外使用BeanCopier也需要注意深度copy的问题。

使用并行流替换for:
因为循环只是在处理数据,每个数据之间互不干扰,所以使用jdk8的并行流比较合适,效率比使用for更是大大提高。

效果:

优化后,压测的效果是:相同数据量的情况下,相比之前,项目B该接口的数据处理效率提升了200倍。

BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化)相关推荐

  1. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  2. 开发中常用的19 条 MySQL 优化技巧

    作者:zhangqh 来源:segmentfault.com/a/1190000012155267 本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL ...

  3. iOS开发中@property的属性weak nonatomic strong readonly等介绍

    @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomic ...

  4. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  5. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  6. android linux 优化,【「Android」UE手游研发中,如何做好Android内存优化?】|Linux|DEX|腾讯游戏|_傻大方...

    傻大方提要:[「Android」UE手游研发中,如何做好Android内存优化?]编者按在大年夜多半人的印象里,用UE引擎制造出来的游戏实际占用内存会比较高.腾讯游戏学院专家Leonn,将和大年夜家分 ...

  7. 对BeanCopier拷贝对象中List类型属性的思考

    背景 最近开发接口过程中,使用BeanCopier拷贝对象,当对象中嵌套自定义对象类型属性的时候, 如果对象名称一致,但是对象类型不一致,拷贝的时候,该属性是会被忽略的,但是当对象中嵌套List集合类 ...

  8. java ee有哪些工具_JavaEE开发中最常用到的技术和工具汇总

    原标题:JavaEE开发中最常用到的技术和工具汇总 今天千锋广州小编给大家来介绍一下关于目前JavaEE开发中最常用到的技术和工具的介绍,下面我们一起来看一下吧. 项目管理:Ant,项目管理事实上的标 ...

  9. 分享.NET开发中经常使用到的代码片段 完全从实际项目中提取出来,也可被反反复复的重复借用...

    几年前,一篇<ASP.NET开发人员经常使用的三十三种代码>非常流行,它总结了一些经常在ASP.NET开发中使用到的代码,直接可以拿来使用.今天重读这篇文章,有感而发,善于总结也是进步,于 ...

最新文章

  1. 2017年2月18日 K-means
  2. Centos7.3 安装Mysql5.7并修改初始密码
  3. python创建实例时显示没有参数-OSError无法创建文件无效参数
  4. ML之FE:数据处理—特征工程的简介、使用方法、案例应用之详细攻略
  5. SpringOne 2017:与Pivotal聊大会、Spring、Reactor、WebFlux及其他
  6. GenericUDF使用流程记载(转载+自己整理)
  7. wampServer配置WWW根目录遇到的坑
  8. [转载] python中print()函数的用法和end=““不换行详解
  9. 2022年中国品质直播选型与应用白皮书
  10. 经过实践的小企业的生存之道
  11. 公司培训笔记(1):沟通的技巧
  12. 为 Electron / Atom Shell 设置应用icon(应用图标)
  13. Navicat 查看导出连接的密码 破解保存的密码 + 密码解密|navicat查看密码方案
  14. 过采样 Oversampling
  15. KVASER 与 Matlab联合使用
  16. 目标客户画像_怎么进行目标人群的用户画像分析?
  17. 在线学习及作业平台管理系统(ssm,mysql)
  18. Mind Manager 13 值得购买吗?一次糟糕的购物体验
  19. 计算机锁定不能强制选项无法关机,win7系统1909无法关机只能强制关机重启的解决办法...
  20. Koomail VS. Foxmail

热门文章

  1. android系统扫盲教程
  2. 药厂中PLD-601不溶性微粒检查仪IoT的流程梳理
  3. DSP模型中FM FFM模型
  4. Linux 执行新程序:execve() 函数
  5. 【java源码】火车订票系统
  6. HDU-1238 Substrings
  7. python函数中self的作用_在Python中self的用途是什么?
  8. 冰箱的矢量变频技术是什么
  9. 计算机的ipv6地址,windows7旗舰版系统下查看电脑iPv6地址的方法【图文详解】
  10. FL Studio20.9序列号账户注册教程