Java代码的性能改进建议(如果条件)

时间:2014-07-27 18:42:16

标签: java

if条件中的以下代码将调用近10,000次并且在测试中显示性能问题。

if (fileUploaderIdListVo != null && fileUploaderIdListVo.size() > 0) {
    for (FileUploaderIdVo fuidVo : fileUploaderIdListVo) {
        if ( fuidVo.getExploded() != null && fuidVo.getExploded().equalsIgnoreCase("Y")) {
            List<Rights> rightsList = rightsDao.list(fuidVo.getContractId());
            int contractTitleId = Integer.parseInt(fuidVo.getContractTitleId());
            List<Integer> titleRightIds = new ArrayList<Integer>();
            for(Rights right: rightsList) {
                if(right!=null ) {
                    titleRightIds.add(right.getId());
                }
            }
            titleRightsManager.saveRightCombination("true", user.getUid(), fuidVo.getContractId(), titleRightIds, contractTitleId,new ArrayList<String>()); 

        }
    }
}

我的想法

将rightList置于if条件之外 2.在if条件

之外再次调用saveRightCombination

请提供合适的方法来改善以下代码的效果。

1 个答案:

答案 0 :(得分:3)

您的瓶颈是访问数据库,而不是您的Java代码。您可以执行以下操作:

  1. 查看需要更长时间的内容 - 查询数据库或更新数据库。如果其中一个比另一个贵得多,那就首先关注它。
  2. 检查您的10,000个查询 - 由于数据库索引问题,它们可能需要一段时间。如果你可以通过添加索引来加速它们 - 这样做,这是加快速度的最简单方法。
  3. 尝试减少查询次数。而不是访问数据库10,000次,看看你是否可以访问它几次(比如,一次加载1/4的记录)。这可以节省相当多的时间。我正在编写“一些”而不是“一次”,因为如果有必要的话,这将允许您将来将代码拆分为多个线程。
  4. 如果问题是更新数据库,请再次查看是否可以联合数据库访问。也许一次发送500个更新,导致20个数据库更新而不是10,000个。如果您的数据库有一些批量复制机制,您可能想要使用它(尽管有10,000条记录,这可能不值得)。