写入到标准输出VS写入文件
这是类似的:写入到标准输出VS写入文件
Printing to the console vs writing to a file (speed)
我很困惑,因为有两个相互矛盾的答案。我写了一个简单的Java程序
for(int i=0; i<1000000; i++){
System.out.println(i);
}
与/usr/bin/time -v java test
运行它来测量时间输出到标准输出,然后我试图/usr/bin/time -v java test > file
和/usr/bin/time -v java > /dev/null
。写入控制台是最慢的(10秒),然后是文件(6秒),而/dev/null
是最快的(2秒)。为什么?
因为写入控制台需要在每次写入内容时刷新屏幕,这需要时间。
写入文件需要在磁盘上写入字节,这需要时间,但刷新屏幕的时间要少。
写入/dev/null
不会在任何地方写任何东西,这会花费更少的时间。
+1当你写很多数据到这些输出设备,它必须实际上对文本做些什么,并且您的程序必须等待它才能做到。即当程序产生的文本太快时,它*减慢消费者的速度。读取/写入的设备通常比您在Java中执行的操作更重要。 –
System.out.println的另一个问题是System.out默认情况下处于自动刷新模式,println实际上会关闭缓冲。试试这个
PrintWriter a = new PrintWriter(System.out, false);
for (int i = 0; i < 1000000; i++) {
a.println(i);
}
a.flush();
,你会看到,输出到文件变得快十倍。
啊,我明白了。如果有一个标志在System.out上打开/关闭缓冲,会很方便。 –
这就是使用日志API的原因之一。 –
[因为'/ dev/null是网络比例](http://www.mongodb-is-web-scale.com/) – 2012-12-17 18:49:51
尝试最小化控制台窗口 – irreputable