2013-12-13 2 views
1

C++의 텍스트 파일과 동일한 크기의 5 ~ 6 개의 큰 배열을 작성해야합니다. 모든 배열을 텍스트 파일에 쓰기 위해 하나의 "for 루프"만 사용하고 있습니다. 다음은 내가 사용하고있는 코드입니다. 여기C++의 텍스트 파일에 배열 쓰기

ofstream kx_ecl("COARSE_PERMX.GRDECL"); 
ofstream ky_ecl("COARSE_PERMY.GRDECL"); 
ofstream kz_ecl("COARSE_PERMZ.GRDECL"); 
ofstream ntg_c("COARSE_NTG.GRDECL"); 
ofstream phi_c("COARSE_PORO.GRDECL"); 
ofstream multbv("MULTBRV.GRDECL"); 


kx_ecl<<"PERMX"<<endl; 
ky_ecl<<"PERMY"<<endl; 
kz_ecl<<"PERMZ"<<endl; 
ntg_c<<"NTG"<<endl; 
phi_c<<"PORO"<<endl; 
multbv<<"MULTBRV"<<endl; 

for (i=0;i<N;i++) { 
    kx_ecl<<new_KX[i]<<endl; 
    ky_ecl<<new_KY[i]<<endl; 
    kz_ecl<<new_KZ[i]<<endl; 
    ntg_c<<new_NTG[i]<<endl; 
    phi_c<<new_por[i]<<endl; 
    multbv<<MULTBRV[i]<<endl; 
} 

kx_ecl<<"/"; 
ky_ecl<<"/"; 
kz_ecl<<"/"; 
ntg_c<<"/"; 
phi_c<<"/"; 
multbv<<"/"; 
kx_ecl.close(); 
ky_ecl.close(); 
kz_ecl.close(); 
ntg_c.close(); 
phi_c.close(); 
multbv.close(); 

내 질문은 I 출력 하나 개별적으로 하나 그들 각각의 경우에 루프 많은이 있거나 그대로두고한다면 그것은 더 빨리이다. 또한 for 루프를 사용하지 않고 파일에 배열을 쓰는 방법이 있습니까? 파일에 대한 출력이 내 코드의 실제 계산과 비교하여 많은 시간이 걸리기 때문에 묻습니다.

+0

필자가 볼 수있는 유일한 차이점은 각 파일이 한꺼번에 순차적으로 생성된다는 것입니다. 예, 일부 파일은 더 빨리 작성되지만 총 시간은 동일하게 유지되어야합니다. –

+0

이 컨텍스트에서 "더 빠름"을 묻는 것은 의미가 없습니다. 그것은 여러 가지 요인에 달려 있습니다. 그러나 일반적으로 다른 모든 파일이 순차적으로 하나의 파일을 순차적으로 쓰고 다음 파일을 연속적으로 쓰는 등 CPU와 디스크 캐싱이 향상되고 검색 시간과 파일 조각화를 줄일 수 있습니다. 또는 파일이 너무 작아서 이러한 효과가 나타나지 않는다면 어떤 방법이 더 빠릅니까? – hyde

답변

3

std :: endl이 ofstreams를 지속적으로 플러시하고 있다는 것을 알고 계십니까? 대신 '\ n'문자를 밀어 내고 각 스트림의 끝에 한 번만 플러시 할 수 있습니다.

I/O가 여전히 소비 시간 중 가장 큰 부분이 될 수 있지만 버퍼링을 방지하기 위해 노력하고 있으며이 예제에서는 아무 것도 얻지 못하고 있습니다. 한 번에 하나의 배열/파일을 사용하면 더 많은 메모리 지역을 사용하기 때문에 성능이 크게 향상 될 수 있습니다 (많은 양의 메모리를 사용하지 않는 한 디스크에 페이지를 스왑하고 있음). 그러나 그 차이는 엄청난 비용으로 완전히 손실됩니다. 파일 쓰기.