这可能是微不足道的,但我找不到答案。我知道我的 Intel i7 8 核处理器每秒可以计算数百万比特。
但是,控制台以慢得多的速度显示以下简单代码。在控制台中,它的速度已经很快,但需要一些时间才能到达终点。
这是因为MS修复了win32控制台窗口的刷新速度吗?先感谢您!
for(int i=1; i<=10e8;i++){
cout<<i<<endl;
}
这可能是微不足道的,但我找不到答案。我知道我的 Intel i7 8 核处理器每秒可以计算数百万比特。
但是,控制台以慢得多的速度显示以下简单代码。在控制台中,它的速度已经很快,但需要一些时间才能到达终点。
这是因为MS修复了win32控制台窗口的刷新速度吗?先感谢您!
for(int i=1; i<=10e8;i++){
cout<<i<<endl;
}
控制台很慢,因为需要在屏幕上滚动文本。每次向控制台写入另一行时,当前内容的图像都需要向上滚动——这个操作需要大量复制才能使滚动平滑。这就是为什么会出现放缓。
您可以通过隐藏控制台窗口来加快该过程:该实现足够智能,不会浪费时间在滚动上。另一个技巧是将控制台的高度减少到更少的行:文本开始滚动得更快,因为需要复制的信息更少。
减速来自显示数据;控制台只是没有优化以令人难以置信的速度显示文本 - 如果您需要编写 GUI 应用程序(或者甚至使用 DirectX 或其他任何必要的东西)。
此外,在每次迭代时刷新缓冲区都会产生相关开销(endl
相当于\n
+ flush
,这意味着您WriteFile
在每次迭代时执行系统调用 - 因此进入内核模式),但在控制台上写入时通常是次要的(输出无论如何都是行缓冲的)。