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
더 오래 검색해야하며 줄 바꿈 할 텍스트가 더 많이있을 수 있습니다 (일부 터미널에서는 백 스페이스를 출력 한 다음 공백을 출력하여 줄 바꿈 된 문자를 덮어 쓰기).
그러나 그것은 순수한 추측입니다.
답변
Java 버전 1.8을 사용하여 Eclipse vs Netbeans 8.0.2에서 테스트를 수행했습니다. 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에는 줄 바꿈 문제가 있습니다 (이클립스에서는 문제가 발생하지 않기 때문에) (B 다음에 공백을 추가하지 않고 ( “B”)) 해결할 수 있습니다.
답변
그렇습니다. 범인은 확실히 줄 바꿈입니다. 두 프로그램을 테스트했을 때 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 도구 로 이동하여 옵션을 클릭하십시오 . 그런 다음 편집기 를 클릭 하고 서식 탭으로 이동 하십시오. 그런 다음 Line Wrap Option 에서 Anywhere 를 선택하십시오 . 프로그램을 컴파일하는 데 거의 6.24 %의 시간이 걸립니다.