मैं C++ (ASCII में 1Go से अधिक) में फ़ाइल में एक विशाल सरणी लिखने का सबसे प्रभावी तरीका खोजने के लिए कुछ मानक चला रहा था।fprintf बनाम std :: ofstream के बहुत आश्चर्यजनक perfs (fprintf बहुत धीमा है)
तो मैं std :: fprintf साथ ofstream (स्विच मैं नीचे इस्तेमाल किया देखना)
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;
}
तुलना में और मेरी बड़ी समस्या यह है कि fprintf std :: ofstream की तुलना में अधिक 12x धीमी है thant हो रहा है है। क्या आपको पता है कि मेरे कोड में समस्या की उत्पत्ति क्या है? या शायद std :: ऑफस्ट्रीम fprintf की तुलना में बहुत अनुकूलित है?
:
आपको बहुत बहुत धन्यवाद (और एक अन्य सवाल आप एक और तेज़ तरीका एक फाइल लिखने के लिए पता है)
(विस्तार: मैं के साथ जी ++ -Wall -O3 संकलन किया गया था)
मुझे लगता है कि आपको अधिक समान व्यवहार प्राप्त करने के लिए fprintf के बजाय fputs का उपयोग करना चाहिए –
'ostream :: लिखें()': http://www.cplusplus.com/reference/iostream/ostream/write/ – Nim
@ एंडर्सके .: नहीं। फ़ुटपुट एक स्ट्रीमबफ (अनफॉर्मेटेड) के बराबर है; fprintf ostream का उचित समकक्ष है। – MSalters