C ++打印到终端显着减慢代码?

时间:2012-07-14 21:39:35

标签: c++ performance printing terminal

我有一个代码,我目前在终端上打印了很多诊断消息。有没有人知道这会减慢我的代码的速度?通过将输出汇总到文件来获得大幅度的提升,例如而不是跑步:

./my_program

我跑

./my_program > output.log

另外,我是否可以通过使用ofstream替换cout并直接写入文件来进一步提高速度?

编辑:我们假设我正在写/ dev / shm,磁盘访问速度并不是真正的问题。

6 个答案:

答案 0 :(得分:8)

是的,渲染到屏幕所需的时间比写入文件要长 在Windows中,它甚至更慢,因为程序渲染不是正在运行的程序,因此在进程之间不断发送消息以获取它。
我想在linux中也是如此,因为虚拟终端与正在运行的进程不同。

答案 1 :(得分:1)

当然可以。打印到终端涉及渲染和其他事情(非平凡),并且通常缓冲少得多。操作系统和流实现可以使用文件I / O进行更多缓冲和缓存。

答案 2 :(得分:1)

你获得多少速度取决于几个因素。例如,Windows控制台速度非常慢。 ofstream 可能cout更快,具体取决于你的libc ++实现(不同的缓冲区大小,线程同步,......)

答案 3 :(得分:0)

如果不测量特定系统,这很难说,但我怀疑写入文件实际上比写入显示更快(文件不必滚动等)。

根据您的操作系统,系统和库,直接写入ofstream 可以进一步提高性能,如果它使用与cout相比不同的缓冲方案,但它可能会没有任何影响。确切知道的唯一方法是对代码进行分析(如评论中已经建议的那样)。

答案 4 :(得分:0)

这实际上取决于您的打印量。

如果您的程序每秒打印50行或更多行,那么我打赌输出开始变得很重要。

输出到文件肯定比打印到终端快得多,尽管不同的终端程序的速度会有很大差异,具体取决于它们正在做多少渲染以及它们用于渲染api的内容。

我非常怀疑cout与ofstream在终端打印性能甚至输出到文件方面存在显着的性能差异。如果使用fwrite编写日志行,可能会获得非常小的性能提升。最终像cout这样的东西会调用fwrite,所以你可以通过自己调用最低级别来获得一点改进。

最后 - 像cout这样的输出流比像cerr这样的错误流更快。 Cout会比cerr做更多的缓冲,性能可以明显更快。但看起来你已经在使用cout了。

答案 5 :(得分:0)

一般来说,是的。如果您不必写入终端,则可以使用文件。如果不需要查看输出,也可以使用/ dev / null。(例如,测量实际速度......)