2010-04-14 56 views

回答

2

好了,除了一個循環中創建新對象的輕微代碼味道,我能看到你裏面創建一個StringBuilder for循環生成在每個項目的長字符串for循環。

但是,您也可以將其範圍限制在for循環之外並在每次傳遞時將其清除。取決於你如何認爲它會更容易閱讀。

+0

「在循環內創建新對象的輕微代碼氣味」 - 這怎麼可能是「代碼味道」?每個Linq到對象的查詢都是一個循環(或多個循環),它們總是可以隨時創建對象。 – 2010-04-14 18:13:30

+0

你只是想看看你在循環內做什麼。在這種情況下,沒有問題。有可能你可能會創建一堆帶有副作用的對象,導致他們稍後出現問題。正如我所說,這只是一個小問題,但在創建非價值對象時需要考慮一些問題。 – 2010-04-14 18:17:05

0

如果你是在與另一個外部StringBuilder結合使用它。

StringBuilder sbAll = new StringBuilder(); 
for (int i=0; i<cnt; i++) { 
    .... 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(","); 
     sbAll.append(sb.toString()); 
    } 
} 

問題是你在循環裏面做了什麼,它足夠可愛,需要一個單獨的StringBuilder?我想這是可能的。

0

如果內循環後面的代碼正在做一些需要大量內存的事情,並且內循環內的StringBuilder也很大,那麼您可能希望將它放在本地範圍內,以便它可以被GC之後免費記憶。否則,我同意JBristow它應該在循環外部作用域,並在內部循環開始時清除(可能還有trimToSize()'d)。