2010-04-14 8 views

답변

2

음, 옆 루프 내부에 새로운 객체를 생성하는 약간의 코드 냄새에서, 나는 당신이 각 항목에 대한 긴 문자열을 생성하는 for 루프 내부의 StringBuilder를 만들어 볼 수 for-loop.

그러나 for 루프 외부에서 범위를 지정하고 각 패스에서 지울 수도 있습니다. 읽는 것이 더 쉬울 것이라고 생각하는 방식에 달려 있습니다.

+0

"코드 내부에서 새로운 객체를 만드는 데 약간의 냄새가납니다"- 어떻게 "코드 냄새"가 날 수 있습니까? 모든 Linq-to-objects 쿼리는 항상 객체를 생성하는 루프 (또는 여러 개의 루프)가 필수적입니다. –

+0

루프 내부에서 수행중인 작업을보고 싶을뿐입니다. 이 경우 아무런 문제가 없습니다. 나중에 GCed되는 문제를 일으키는 부작용이있는 객체를 만들 수있는 기회가 있습니다. 앞에서 말했듯이, 이것은 약간의 문제 일 뿐이지 만, 비 가치 객체를 만들 때 고려해야 할 사항입니다. –

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에 대해 알 수 있도록 할 수 있습니다. 나중에 메모리를 비우십시오. 그렇지 않으면 나는 JBistow가 루프 밖에서 범위를 지정하고 내부 루프의 시작 부분에서 trimToSize() d)를 지워야한다고 동의합니다.