昨天做一个程序的性能测试的时候,由于用了自动化脚本,测试的时候直接把结果(包括执行时间等信息)输出到文件。后来我在调整源代码的时候单独跑了可执行文件,此时结果是输出到控制台(printf)。大约100k数据平均竟相差了54%,显然是控制台输出的时间消耗会较大。

这个问题困扰了我差不多十几分钟,还特地细心比对了编译版本等影响因素。后来经过各种方法比对测试才发现,很可能是console output比管道重定向输出到文件耗时要多。

其实这个问题如果面试问起来许多人有点经验应该都知道会选console output 慢,但现实中自己自测的时候受很多因素影响,不一定能顾及的面面俱到。

既然知道了这个问题干脆我就亲自验证一下:

 1 #include <cstdio>
 2 #include <ctime>
 3
 4 int main() {
 5     double start = clock();
 6
 7     for (int i = 0; i < 1000000; i++) {
 8         printf("Test.\n");
 9     }
10
11     double during = double(clock() - start) / CLOCKS_PER_SEC;
12     printf("Time cost:  %lf\n", during);
13
14     return 0;
15 }

一个简单的小程序,两种方法输出。

$[lhfcws] ./main
$[lhfcws] ./main > main.file

然后是结果:

                    

可以看到,控制台输出 2.98s , 重定向文件输出 0.04s,简直不是一个数量级的。

确定了结论,确实是 控制台输出要比重定向文件输出要慢,而且慢很多!

知道结论很简单,关键是原理。

来自StackOverflow的解释:http://stackoverflow.com/questions/7404551/why-is-console-output-so-slow

主要原因:  Console 会给多个进程共享,因此对console操作时会存在进程同步和缓存问题。

目前只搜索到这个原因。我自己还有猜测另外一个原因,会不会是文件输出是写磁盘会OS有所优化?

转载于:https://www.cnblogs.com/lhfcws/p/3197735.html

console ouput 与 重定向输出 效率对比相关推荐

  1. python和c运行速度的对比实验_Python中单线程、多线程和多进程的效率对比实验...

    原标题:Python中单线程.多线程和多进程的效率对比实验 文 | 饒木陽 Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下 ...

  2. 数组常见的遍历循环方法、数组的循环遍历的效率对比

    1 遍历数组的方法 1-1.for / while 最普通的循环 效率最高 兼容ie6 tips:for循环更适用于循环的开始和结束已知,循环次数固定的场合:while循环更适合于条件不确定的场合 1 ...

  3. 一个C#和C++执行效率对比的简单实例

    这里用一个算法题进行比较. 原题是见http://acm.hdu.edu.cn/showproblem.php?pid=4090,登载在http://blog.csdn.net/woshi250hua ...

  4. c# typeof 与 Type.GetType 使用与效率对比

    c# typeof 与 Type.GetType 使用与效率对比 static void ReflectionTest(){//测试两种反射的效率问题//Type.GetType()只能在同一个程序集 ...

  5. python 向量_关于Python中的向量相加和numpy中的向量相加效率对比

    直接使用Python来实现向量的相加 # -*-coding:utf-8-*- #向量相加 def pythonsum(n): a = range(n) b = range(n) c = [] for ...

  6. NOT IN、JOIN、IS NULL、NOT EXISTS效率对比

    语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B ...

  7. python io密集型应用案例-Python中单线程、多线程和多进程的效率对比实验实例

    python的多进程性能要明显优于多线程,因为cpython的GIL对性能做了约束. Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread ...

  8. Oracle常用导出导出命令及性能效率对比

    说明 Oracle导入导出命令主要有EXPDP和IMPDP.EXP和IMP,区别如下:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用.EXPDP和IMPDP是服务端的工具程 ...

  9. java 数组效率_java数组复制的四种方法效率对比

    有关数组的基础知识,有很多方面,比方说初始化,引用,遍历,以及一维数组和二维数组,今天我们先看看数组复制的有关内容. 来源于牛客网的一道选择题: JAVA语言的下面几种数组复制方法中,哪个效率最高? ...

  10. python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比

    直接使用Python来实现向量的相加 # -*-coding:utf-8-*- #向量相加 def pythonsum(n): a = range(n) b = range(n) c = [] for ...

最新文章

  1. Mac OS X 下mysql配置备忘
  2. iOS 字符属性NSAttributedString描述
  3. Quartz.Net cron表达式详解
  4. 修改数据库服务器日期命令,服务器上数据库用命令修改
  5. 中央空调水系统与制冷系统运行参数
  6. 为什么尽量使用常量引用
  7. C# Serializable(序列化)
  8. Linux学习记录-7
  9. 蚂蚁区块链BaaS:开放在云端,落地于实体
  10. html是什么1002无标题,Jsf页面为普通/无标题的文本html
  11. Android学习二:Http操作
  12. Druid 简介,架构,部署,python连接,hue链接druid
  13. led灯条维修_康佳液晶电视LED42F2200N灯条问题导致不开机故障修复
  14. 虚拟DOM和DIFF算法的理解
  15. 依赖注入应该慎用,测试可用测试框架帮忙
  16. java jsp分页_jsp实现分页的步骤及代码
  17. js+canvas 图片+文字合成
  18. 《逻辑:你认为正确,就一定正确吗?》
  19. 节假日查询 麦谈帮API数据接口
  20. uni-app实现XCode苹果本地离线打包APP

热门文章

  1. 关于使用Kaptcha验证码框架遇到的问题
  2. 塞尔达传说gba_【译介】《塞尔达传说:不可思议的帽子》2004年开发者访谈
  3. python 新建文件 hdfs_python使用hdfs3模块对hdfs进行操作详解
  4. java list 排序_java 对list进行排序
  5. java web 开发环境布置学习笔记1
  6. visibility和hidden
  7. Redis执行monitor命令报错 (error) NOAUTH Authentication required.
  8. 配置中心Nacos与Apollo比较
  9. JFreeChart自定义拆线图
  10. 【渝粤题库】陕西师范大学300013 西方史学史