Tôi đã chạy một số điểm chuẩn để tìm cách hiệu quả nhất để viết một mảng lớn vào một tệp trong C++ (hơn 1Go trong ASCII).Rất ngạc nhiên về số lượng fprintf vs std :: ofstream (fprintf rất chậm)
Vì vậy, tôi so std :: ofstream với fprintf (xem công tắc tôi đã sử dụng dưới đây)
case 0: {
std::ofstream out(title, std::ios::out | std::ios::trunc);
if (out) {
ok = true;
for (i=0; i<M; i++) {
for (j=0; j<N; j++) {
out<<A[i][j]<<" ";
}
out<<"\n";
}
out.close();
} else {
std::cout<<"Error with file : "<<title<<"\n";
}
break;
}
case 1: {
FILE *out = fopen(title.c_str(), "w");
if (out!=NULL) {
ok = true;
for (i=0; i<M; i++) {
for (j=0; j<N; j++) {
fprintf(out, "%d ", A[i][j]);
}
fprintf(out, "\n");
}
fclose(out);
} else {
std::cout<<"Error with file : "<<title<<"\n";
}
break;
}
Và vấn đề lớn của tôi là fprintf rằng có vẻ là Thant hơn 12x chậm hơn so với std :: ofstream. Bạn có ý tưởng về nguồn gốc của vấn đề trong mã của tôi không? Hoặc có thể std :: ofstream là rất tối ưu so với fprintf?
(và một câu hỏi khác: Bạn có biết một cách khác nhanh hơn để viết một tập tin)
Thank you very much
(chi tiết: Tôi đã được biên soạn với g ++ Wall-O3)
tôi nghĩ bạn nên sử dụng fputs thay vì fprintf để có được hành vi tương tự hơn –
cũng xem 'ostream :: write() ': http://www.cplusplus.com/reference/iostream/ostream/write/ – Nim
@ AndersK .: Số fputs là tương đương với một streambuf (unformatted); fprintf là đối tác thích hợp của ostream. – MSalters