C ++为什么最简单的循环添加在控制台中显示得如此之慢?

时间:2013-05-26 01:43:26

标签: c++

这可能是微不足道的,但我找不到答案。我知道我的Intel i7 8核心处理器每秒可以计算数百万比特。

但是,控制台以较慢的速度显示以下简单代码。在控制台中,它已经很快,但需要一些时间才能结束。

这是因为MS修复了win32控制台窗口的刷新速度吗?提前谢谢!

for(int i=1; i<=10e8;i++){
    cout<<i<<endl;
}

2 个答案:

答案 0 :(得分:8)

控制台很慢,因为需要在屏幕上滚动文本。每次向控制台写入另一行时,当前内容的图像都需要向上滚动 - 需要大量复制才能动画平滑滚动的操作。这就是为什么会出现放缓的原因。

您可以通过隐藏控制台窗口来加快进程:实现足够智能,不会浪费时间滚动。另一个技巧是将控制台的高度减少到更少的行:文本开始滚动的速度要快得多,因为需要复制的信息较少。

答案 1 :(得分:4)

减速来自显示数据;控制台没有优化以令人难以置信的速度显示文本 - 如果您需要,您可以编写GUI应用程序(或者甚至在必要时使用DirectX或其他任何东西)。

此外,在每次迭代时刷新缓冲区都会产生相关的开销(endl相当于\n + flush,这意味着您在WriteFile执行{{1}}系统调用每次迭代 - 因此进入内核模式),但在控制台上写入时通常是次要的(无论如何输出都是行缓冲的。)