2009-06-22 45 views
0

這兩段代碼之間有性能差異嗎?我的直覺是第二種選擇比較慢,因爲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

這看起來不像您在緊密循環中調用的那種代碼。你看到一個性能問題,試圖優化這個功能嗎? – 2009-06-22 12:48:15

+0

它與iText PDF生成器有關嗎? – akarnokd 2009-06-22 12:49:11

回答

4

正如你所說的,由於分配一個新的對象,選項2會變慢。

這看起來像是一個清晰的代碼與性能決定。我個人認爲選項二更清晰,性能影響可以忽略不計。

然而,不知道什麼iTextTable是很難說某些使用。如果initiTextDefaultCell在表被實例化時調用一次,那麼我會選擇二,但如果調用次數initiTextDefaultCell取決於表的大小,則選項1會更好(假設默認單元格被實例化爲部分實例iTextTable)。

18

寫一個測試程序,看看你自己。

2

第二個是(可能)較慢(但請參閱Mnementh的評論)。它正在做第一個做的和所有事情。但是,這並不意味着如果你認爲這是更好的設計,就不應該使用它(我傾向於同意)。 Lou說,這可能不是你的瓶頸。如果你需要知道肯定,測試。

3

嗯...哪個更慢,10ms或1ms?

選項2將比選項1慢,是的,但即使差異可能是10的因子,即使是「高」因子,當慢速版本足夠快時不會被人注意到(數字使用只是作爲例子給出)。

性能的第一條規則是,只有在必要時才進行優化。性能的第二個規則是設計良好的系統通常具有良好的性能,並且在需要時更容易優化。

選項2更具可讀性和更好的設計。那是因爲該方法創建了Cell配置它。

相關問題