这两段代码之间是否存在性能差异?

时间:2009-06-22 12:44:03

标签: java performance

这两段代码之间是否存在性能差异?我的直觉是第二个选项比较慢,因为每次都必须构建Cell对象,但我喜欢返回Cell的想法。

选项一:

//Call to method
initiTextDefaultCell(borders);
iTextTable.setDefaultCell(iTextDefaultCell);
//Other code...

private void initiTextDefaultCell(boolean borders) {
  if (!borders)
    iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
  else 
    iTextDefaultCell.setBorder(Rectangle.BOX);
}

选项二:

//Call to method
iTextTable.setDefaultCell(initiTextDefaultCell(borders));
//Other code...

private Cell initiTextDefaultCell(boolean borders) {
  Cell iTextDefaultCell = new Cell();
  if (!borders)
    iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
  else 
    iTextDefaultCell.setBorder(Rectangle.BOX);
  return iTextDefaultCell;
}

谢谢!

4 个答案:

答案 0 :(得分:18)

编写测试程序并亲自查看。

答案 1 :(得分:4)

正如您所说,由于分配了新对象,选项2将会变慢。

这看起来像是清晰的代码与性能决策。我个人认为备选方案2更清晰,性能影响可以忽略不计。

然而,在不知道iTextTable是什么的情况下,很难确定使用哪个。{1}}。如果在实例化表时调用initiTextDefaultCell,那么我将使用选项2,但是如果调用initiTextDefaultCell的次数取决于表的大小,则选项1会更好(假设默认单元格是作为iTextTable)实例化的一部分实例化的。

答案 2 :(得分:3)

嗯...这是慢,10毫秒还是1毫秒?

选项2将比选项1慢,是的,但即使差异可能是10倍,即使是“高”因素,当慢速版本足够快时也不会被人注意到(使用的数字)仅举例说明。)

性能的第一条规则是,只在必要时进行优化。 第二个性能规则是,设计良好的系统通常具有良好的性能,并且在需要时更容易优化。

选项2更具可读性和更好的设计。那是因为该方法创建了Cell也可以配置它。

答案 3 :(得分:2)

第二个(可能)较慢(但请参阅Mnementh的评论)。它正在做第一个正在做的事情和更多。但这并不意味着你不应该使用它,如果你认为它是更好的设计(我倾向于同意)。正如娄所说,这可能不是你的瓶颈。如果您需要确定,请测试。