刚刚开始学习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
答案 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);