질문자 :Kuba Spatny
1000
x 1000
의 두 행렬을 생성했습니다.
첫 번째 행렬: O
및 #
.
두 번째 행렬: O
및 B
.
다음 코드를 사용하여 첫 번째 행렬을 완료하는 데 8.52초가 걸렸습니다.
Random r = new Random(); for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { if(r.nextInt(4) == 0) { System.out.print("O"); } else { System.out.print("#"); } } System.out.println(""); }
이 코드를 사용하면 두 번째 행렬을 완료하는 데 259.152초가 걸렸습니다.
Random r = new Random(); for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { if(r.nextInt(4) == 0) { System.out.print("O"); } else { System.out.print("B"); //only line changed } } System.out.println(""); }
극적으로 다른 실행 시간의 이유는 무엇입니까?
주석에서 제안한 대로 System.out.print("#");
7.8871
초가 걸리는 System.out.print("B");
still printing...
제공합니다....
정상적으로 작동한다고 지적한 다른 사람들처럼, 예를 들어 Ideone.com 을 시도했고 두 코드 조각이 같은 속도로 실행됩니다.
시험 조건:
- 나는 Netbeans 7.2 에서 이 테스트를 실행했고 그 콘솔에 출력을 냈다.
- 측정을 위해
System.nanoTime()
을 사용했습니다.
순수한 추측 은 문자 줄 바꿈이 B
를 단어 문자로 #
을 단어가 아닌 문자로 취급하는 터미널을 사용하고 있다는 것입니다. 따라서 줄 끝에 도달하고 줄을 끊을 위치를 검색할 때 #
거의 즉시 그리고 행복하게 끊깁니다. 반면 B
를 사용하면 더 오래 검색해야 하고 줄 바꿈할 텍스트가 더 많을 수 있습니다(일부 터미널에서는 비용이 많이 들 수 있습니다. 예를 들어 백스페이스를 출력한 다음 줄 바꿈되는 문자를 덮어쓰기 위해 공백을 출력함).
그러나 그것은 순수한 추측입니다.
Community WikiEclipse와 Netbeans 8.0.2에 대한 테스트를 Java 버전 1.8에서 수행했습니다. 측정을 위해 System.nanoTime()
을 사용했습니다.
식:
나는 두 경우 모두 같은 시간을 얻었다 - 약 1.564초 .
넷빈:
- "#" 사용: 1.536초
- "B" 사용: 44.164초
따라서 Netbeans는 콘솔로 인쇄할 때 성능이 좋지 않은 것 같습니다.
더 많은 연구를 한 후에 문제가 Netbeans의 최대 버퍼의 줄 바꿈 System.out.println
명령으로 제한되지 않음)이라는 것을 깨달았습니다. 이 코드는 다음과 같습니다.
for (int i = 0; i < 1000; i++) { long t1 = System.nanoTime(); System.out.print("BBB......BBB"); \\<-contain 1000 "B" long t2 = System.nanoTime(); System.out.println(t2-t1); System.out.println(""); }
시간 결과는 시간 결과가 약 225밀리 초인 경우 매 5번째 반복을 제외하고 모든 반복마다 1밀리초 미만입니다. (나노초 단위):
BBB...31744 BBB...31744 BBB...31744 BBB...31744 BBB...226365807 BBB...31744 BBB...31744 BBB...31744 BBB...31744 BBB...226365807 . . .
등등..
요약:
- Eclipse는 "B"와 완벽하게 작동합니다.
- Netbeans에는 해결할 수 있는 줄 바꿈 문제가 있습니다(Eclipse에서는 문제가 발생하지 않기 때문에)(B("B") 뒤에 공백을 추가하지 않고).
Roy Shmuli예, 범인은 확실히 단어 줄 바꿈입니다. 두 프로그램을 테스트했을 때 NetBeans IDE 8.2는 다음과 같은 결과를 제공했습니다.
- 첫 번째 행렬: O 및 # = 6.03초
- 두 번째 행렬: O 및 B = 50.97초
코드를 자세히 살펴보면 첫 번째 루프의 끝에 줄 바꿈을 사용했습니다. 그러나 두 번째 루프에서 줄 바꿈을 사용하지 않았습니다. 따라서 두 번째 루프에서 1000자의 단어를 인쇄할 것입니다. 그로 인해 줄 바꿈 문제가 발생합니다. B 다음에 단어가 아닌 문자 " "를 사용하면 프로그램을 컴파일하는 데 5.35초밖에 걸리지 않습니다. 그리고 100개 값 또는 50개 값을 전달한 후 두 번째 루프에서 줄 바꿈을 사용하면 각각 8.56초 와 7.05초밖에 걸리지 않습니다.
Random r = new Random(); for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { if(r.nextInt(4) == 0) { System.out.print("O"); } else { System.out.print("B"); } if(j%100==0){ //Adding a line break in second loop System.out.println(); } } System.out.println(""); }
또 다른 조언은 NetBeans IDE의 설정을 변경하는 것입니다. 우선 NetBeans 도구 로 이동하여 옵션 을 클릭합니다. 그런 다음 편집기 를 클릭하고 서식 탭으로 이동합니다. 그런 줄 바꿈 옵션의 어느 곳을 선택합니다. 프로그램을 컴파일하는 데 거의 6.24% 더 적은 시간이 소요됩니다.
Abdul Alim Shakir출처 : http:www.stackoverflow.com/questions/21947452/why-is-printing-b-dramatically-slower-than-printing