2012-04-19 2 views
1

성능 및 모범 사례에서 올바른 방법이 궁금합니다.더 빠른 방법 : 배열을 클래스로 전달하고 각 루프에 대해 a 수행하기 또는 클래스의 각 루프에 대해 수행하기

URL 배열이 있는데이 페이지의 콘텐츠를 스크랩하고 있습니다. 스크래핑을 처리 할 별도의 클래스가 있습니다.

현재 배열 목록을 클래스에 전달하면 클래스가 각 배열의 내용을 스크랩하는 배열 내용을 반복합니다. 나는 이것이 이것이 최선의 방법이라고 믿는다.

내가 생각한 다른 방법은 배열을 반복하는 것이고 각 URL을 클래스에 전달합니다. 이것은 나에게 느린 것처럼 보이지만 확실하지 않습니다.

두 가지 방법 모두 실행 가능하면 자신의 직업과 사기범은 무엇입니까?

+3

마이크로와 조기 최적화 같은 소리 - 더 읽기 쉬운 것을하십시오 ... 나중에 프로그램을 프로파일 링하여이 부분이 병목 현상이라고 생각하면 리팩토링을 고려할 수도 있습니다.하지만 그때까지는 그럴 가치가 없습니다 그것을 수정할 시간. – amit

+1

이것은 성능면에서 아무 의미가 없습니다. 루프 관리는 현미경으로, 사라지는 작은 부분입니다. –

+1

amit이 말하는 것은 사실입니다. 문자열을 파싱하거나 네트워크 통신을 수행하는 경우 객체 생성시 어떤 차이가 없음을 알 수 있습니다. 따라서 항상 문제가 발생했을 때만 유지 보수 및 최적화를 수행하십시오. – Thirler

답변

5

나는 당신이 가장 분명하고 단순하다고 생각하는 것을 제안합니다.

어레이를 통과하는 것이 약간 빠르며 수 나노 초를 절약 할 수 있습니다. 그러나 수행하는 작업이 수 나노 초 정도가 아니면 차이를 알 수 없을 것입니다.

+0

대단히 고맙습니다. 어느 방법이 내 앱에 눈에 띄는 영향을 미치는지 확실하지 않았습니다. 답변 해주셔서 감사합니다! – Peck3277

+0

각 메서드 호출은 몇 ns를 추가 할 수 있으므로 호출하면 몇 초가 걸릴 수 있습니다. –

1

기술적으로는, 클래스에 각 항목을 통과하는 페이지 당 메소드 호출의 추가 오버 헤드가 느려질 것입니다 것은 (이 가정 당신이하고있는 일입니다) :

URLProcessor up = new URLProcessor(); 
for(String url: URLs) { 
    up.process(url); // method call for each URL 
} 

대신 :

up.process(URLs); // a single method call 

그러나이 방법이 수백만 번 호출되지 않는 한 눈에 띄게 실행 속도에 영향을주지는 않습니다. 프로그램보다 훨씬 더 많은 과중 작업이 발생합니다.

관련 문제