为了能提高代码的运行效率,需要在代码中注意以下实现逻辑
1、减少IO操作
常见的IO操作有:
- 数据库操作
- 接口请求
- IO流
举例说明
反例:
# 拼接查询
for(User user: users){
UserGrade grade = userGradeDao.selectById(user.getId());
user.setGrade(grade.getGrade());
}
# 循环插入
for(Long id:ids){
User user = new User();
user.setId(id);
user.setName("Name");
userDao.insert(user);
}
正例:
# 优先构造条件,一次查询所有结果在内存中组装
Map<Long, User> userMap = new HashMap<Long,User>();
List<Long> ids = new ArrayList<Long>();
for(User user: users){
userMap.put(user.getId(), user);
ids.add(user.getId());
}
List<UserGrade> grades = userGradeDao.selectByIds(ids);
if (CollectionUtils.isNotEmpty(grades){
for(UserGrade grade: grades){
User user = userMap.get(grade.getUserId());
if (user != null) user.setGrade(grade.getGrade());
}
}
# 批量插入
List<User> users = new ArrayList(ids.size());
for(Long id:ids){
User user = new User();
user.setId(id);
user.setName("Name");
users.add(user);
}
userDao.insertBatch(users);
2、减少循环
循环是代码中必不可少的业务处理, 然后也是影响业务处理最常见的性能问题
3个size为100 的list 嵌套循环代码需要执行1,000,000次,如果每次20毫秒,系统可能直接崩溃
所有尽量减少循环嵌套,特别是未知size或者大size的循环
网友评论