In C++, which would be faster if repeated, say, 5000 times:
cout << "text!" << endl;
or
my_text_file << "text!" << endl;
(writing to a file vs. cout-ing to the console)
Edit:
I ask because when writing to the console, you see all the text being printed which seems like it would slow down the loop. In a file, you arn't seeing the text being printed, which seems as if it would take less time.
Just tested it:
Console: > 2000 ms using endl and \n
File: 40 ms with endl and 4 ms with \n
Writing to a file would be much faster. This is especially true since you are flushing the buffer after every line with endl
.
On a side note, you could speed the printing significantly by doing repeating cout << "text!\n";
5000 times, then flushing the buffer using flush()
.
It's not that much faster...
A test of 1 million couts
with endl (clear buffer):
Results:
console cout time: 2.87001
file cout time: 2.33776
Code:
class Timer
{
struct timespec startTime, endTime;
double sec;
public:
void start();
void stop();
double getSec();
};
void Timer::start()
{
clock_gettime(CLOCK_MONOTONIC, &startTime);
}
void Timer::stop()
{
clock_gettime(CLOCK_MONOTONIC, &endTime);
sec = (endTime.tv_sec - startTime.tv_sec);
sec += (endTime.tv_nsec - startTime.tv_nsec) / 1000000000.0;
}
double Timer::getSec()
{
return sec;
}
int main(){
int ntests = 1000000;
Timer t1 = Timer(), t2 = Timer();
t1.start();
for(int c=0;c<ntests;c++)
{
cout << "0" << endl;
}
t1.stop();
ofstream out("out.txt");
streambuf *coutbuf = cout.rdbuf();
cout.rdbuf(out.rdbuf());
t2.start();
for(int c=0;c<ntests;c++)
{
cout << "0" << endl;
}
t2.stop();
cout.rdbuf(coutbuf);
cout << "console cout time: " << t1.getSec() << endl;
cout << "file cout time: " << t2.getSec() << endl;
}
Build and run:
g++ test.cpp -o test -lrt && ./test && rm out.txt
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With