왜 "B"가 인쇄 "#"보다 크게 느리게 인쇄하는 이유는 무엇입니까?
질문
나는 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");아직도 인쇄를 제공합니다 ....
다른 사람들이 정상적으로 그들을 위해 작동한다는 것을 지적했던 것처럼, 예를 들어 ideone.com을 시도했고, 코드 조각은 동일한 속도로 모두 실행됩니다.
시험 조건:
- I ran this test from Netbeans 7.2, with the output into its console
- I used
System.nanoTime()
for measurements
답변
순수한 추측은 문자 포장이 아닌 단어 랩핑을 시도하는 터미널을 사용하고 있으며 B를 단어 문자로 취급하지만 워드가 아닌 문자로 취급합니다.따라서 선의 끝에 도달하고 선을 깰 장소를 검색하면 # 거의 즉시 즉시 끊어지고 있습니다.B와 함께, 그것은 더 오랫동안 검색을 유지해야하며, 랩에 더 많은 텍스트를 가질 수 있습니다 (일부 터미널에서는 비용이 많이 들고 백 스페이스를 출력 한 다음 포장 된 문자를 덮어 씁니다).
그러나 그것은 순수한 추측입니다.
답변
Java 버전 1.8 모두와 Eclipse vs NetBeans 8.0.2에서 테스트를 수행했습니다. 나는 측정을 위해 system.nanotime ()을 사용했습니다.
식:
나는 두 경우 모두에 동시에 일치했습니다 - 약 1.564 초.
NetBeans :
"#"을 사용하여 : 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 번째 반복을 제외한 모든 반복을 제외한 모든 반복이 적습니다.(나노초에서) 같은 것 :
BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
.
.
.
등등..
요약:
- Eclipse works perfectly with "B"
- Netbeans has a line-wrapping problem that can be solved (because the problem does not occur in eclipse)(without adding space after B ("B ")).
답변
예, 범인은 확실히 단어 포장입니다.Netbeans IDE 8.2는 두 가지 프로그램을 테스트했을 때 다음과 같은 결과를주었습니다.
- First Matrix: O and # = 6.03 seconds
- Second Matrix: O and B = 50.97 seconds
코드를 밀접하게 보면 첫 번째 루프가 끝날 때 줄 바꿈을 사용했습니다.그러나 두 번째 루프에서 모든 줄 바꿈을 사용하지 않았습니다.따라서 두 번째 루프에 1000 자로 단어를 인쇄 할 것입니다.이는 단어 랩핑 문제가 발생합니다.Word가 아닌 문자를 사용하는 경우 ""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 % 덜 시간이 걸릴 것입니다.

답변
출처:https://stackoverflow.com/questions/21947452/why-is-printing-b-dramatically-slower-than-printing
최근댓글