性能优化之避免在循环里面操作IO

来源:互联网 发布:java内存泄露代码 编辑:程序博客网 时间:2024/05/17 04:51

一、介绍

之所以写这篇博客,是因为在开发中,在一次项目的代码code review中,发现一段代码的执行效率很低,后面才发现,是因为在循环里面我们操作了数据库 IO方面,所以效率低下。请看下面的代码优化步骤。

二、问题的阐述

假设我们有100个contact数据,现在我们需要根据这些contact数据去获取相应的client数据。在contact对象中,有一个clientId属性,然后我们可以根据clientId属性的值去获取相应的client数据。相应的伪代码如下:

public List<Contact> fetchContactClient(List<Contact> contactList){for(Contact contact : contactList){Client client = contactDao.getClientById(contact.getClient().getId());contact.setClient(client);}return contactList;}
那么这样的话,在循环里面,我们有了数据库的IO操作,这样的话效率肯定就慢了,相当于我们做了contactList的集合大小的数据库访问操作。

三、代码优化

如果我们将contactList的集合大小的数据库访问操作变成一个数据库的操作,那么速度就上来了。伪代码如下:
      public List<Contact> fetchContactClient(List<Contact> contactList){Integer[] ids = new Integer[contactList.size()];for(int i = 0 ;i < contactList.size(); i++){ids[i] = contactList.get(i).getClient().getId();}List<Client> clientList = contactDao.getClientByIds(ids);//do something,做client和contact的匹配代码return contactList;}
经过我们优化之后,将访问数据库的操作变成了一次,这样就大大加快了代码的执行效率。

0 0
原创粉丝点击