为什么在Scala中打印这么慢?

时间:2014-12-23 21:36:56

标签: java performance scala

刚刚开始学习Scala :)马上问题:为什么打印到stdout这么慢?

$ time scala -e 'val s = "foobarjoe!"; for (i <- 1 to 10000000) println(s)' > /dev/null

real    0m22.522s
user    0m14.252s
sys     0m8.508s

$ scala -version
Scala code runner version 2.11.4 -- Copyright 2002-2013, LAMP/EPFL

Perl中的相同代码作为示例:

$ time perl -le '$s = "foobarjoe!"; for (1..10000000) { print($s) }' > /dev/null

real    0m1.276s
user    0m1.266s
sys     0m0.010s

1 个答案:

答案 0 :(得分:1)

此链接回答了问题:http://www.rgagnon.com/javadetails/java-0603.html

  

如果您的程序使用System.out.println()对控制台进行大量打印,则可以通过使用替代方法来执行控制台输出,从而获得良好的性能提升。

     

默认情况下,System.out.print()只是行缓冲,并且与Unicode处理有很多相关的工作。由于其缓冲区大小较小,System.out.println()不适合在批处理模式下处理许多重复输出。每条线都立即冲洗。如果您的输出主要是基于ASCII的,那么通过删除与Unicode相关的活动,总体执行时间会更好。

现在仍然需要将Java解决方案转换为Scala:)

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new
     FileOutputStream(java.io.FileDescriptor.out), "ASCII"), 512);