Я заметил, что вывод в командной строке Windows намного медленнее, чем вывод в Bash. Я говорю о командной строке, которая занимает около 10 секунд, чтобы напечатать 40000 строк, а Bash - менее одной десятой секунды.
Например, следующий код заполняет стек целыми числами от 1 до 40000, а затем выводит его на стандартный вывод и в текстовый файл:
#include <iostream>
#include <chrono>
#include <fstream>
template <typename T>
struct Node {
Node(T data, Node *next = nullptr) {
this->data = data;
this->next = next;
}
T get_data() { return data; }
Node * get_next() { return next; }
void set_data(T data) { this->data = data; }
void set_next(Node *next) { this->next = next; }
private:
T data;
Node *next;
};
template <typename T>
class Stack {
public:
Stack() { head = nullptr; }
void push(T val) { head = new Node<T>(val, head); }
void print(std::ostream &os = std::cout) {
Node<T> *it = head;
while (it) {
os << it->get_data() << "\n";
it = it->get_next();
}
}
private:
Node<T> *head;
};
int main() {
Stack<int> s;
std::chrono::high_resolution_clock::time_point starttime = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 40000; i++) {
s.push(i + 1);
}
s.print();
std::chrono::high_resolution_clock::time_point endtime = std::chrono::high_resolution_clock::now();
std::cout << "Time taken to print to stdout: " << std::chrono::duration_cast<std::chrono::duration<double>>(endtime - starttime).count() << " seconds.\n";
std::cout << "Writing to file...";
starttime = std::chrono::high_resolution_clock::now();
std::ofstream ofs("output.txt");
s.print(ofs);
endtime = std::chrono::high_resolution_clock::now();
std::cout << " Done\nTime taken to print to file output.txt: " << std::chrono::duration_cast<std::chrono::duration<double>>(endtime - starttime).count() << " seconds.\n";
return 0;
}
В Windows печать на стандартный вывод занимает от 6 до 10 секунд, тогда как запись в файл занимает около 2 миллисекунд. В Linux печать на терминал занимает одну десятую секунды, тогда как печать в файл примерно такая же, как в Windows.
Есть ли способ улучшить скорость вывода CMD?