मैं जानता हूँ कि यह बहुत पुरानी धागा है, लेकिन मैं किसी को जो बढ़ावा बिना एक ही समाधान और और सबसे तेजी से एक की तलाश में है में जोड़ने के लिए चाहते हैं।
मैं ऊपर तीन अलग-अलग प्रस्तावों और एक/dev/बातिल के लिए सीधे लेखन (इसलिए यह कर्नेल शामिल है।)
हैरानी की बात यह है कि ज्यादातर NullStream मत मिले सबसे खराब प्रदर्शन किया संयुक्त।
यहाँ 100000000 लेखन के लिए परिणाम हैं:
a) /dev/null : 30 seconds
b) NullStream: 50 seconds
c) badbit : 16 seconds (the winner in speed, but cannot test for errors!)
d) boost : 25 seconds (the ultimate winner)
यहाँ परीक्षण कोड
#include <iostream>
#include <fstream>
#include <time.h>
#include <boost/iostreams/stream.hpp>
class NullStream : public std::ostream {
class NullBuffer : public std::streambuf {
public:
int overflow(int c) { return c; }
} m_nb;
public:
NullStream() : std::ostream(&m_nb) {}
};
int test(std::ostream& ofs, const char* who) {
const time_t t = time(NULL);
for (int i = 0 ; i < 1000000000 ; i++)
ofs << "Say the same" ;
std::cout << who << ": " << time(NULL) - t << std::endl;
}
void devnull() {
std::ofstream ofs;
ofs.open("/dev/null", std::ofstream::out | std::ofstream::app);
test(ofs, __FUNCTION__);
ofs.close();
}
void nullstream() {
NullStream ofs;
test(ofs, __FUNCTION__);
}
void badbit() {
std::ofstream ofs;
ofs.setstate(std::ios_base::badbit);
test(ofs, __FUNCTION__);
}
void boostnull() {
boost::iostreams::stream<boost::iostreams::null_sink> nullOstream((boost::iostreams::null_sink()));
test(nullOstream, __FUNCTION__);
}
int main() {
devnull();
nullstream();
badbit();
boostnull();
return 0;
}
संपादित
सबसे तेजी से समाधान है - जहां हम badbit का उपयोग करें - एक नकारात्मक पक्ष यह है। यदि कार्यक्रम जांचता है कि आउटपुट सफलतापूर्वक लिखा गया है - और मुझे नहीं पता कि प्रोग्राम को ऐसा क्यों नहीं करना चाहिए - तो यह इस खराब सीमा के कारण विफल हो जाएगा। इसलिए, रनर अप - बोस्ट - विजेता है।
आप '/ dev/null' को' std :: ofstream' –
में खोल सकते हैं कुछ पोर्टेबल, @Alexandre – paperjam
मुझे पता चला (अन्यथा यह एक उत्तर होगा) http://stackoverflow.com/questions/ 313111/dev-null-in-windows में पर्याप्त मामलों को कवर करना चाहिए। –