Windows CMD очень медленная по сравнению с Bash - PullRequest
0 голосов
/ 11 сентября 2018

Я заметил, что вывод в командной строке 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...