System.out.println与PrintWriter的性能比较?

时间:2014-01-24 07:21:36

标签: java printwriter system.out

我想打印100万行到stdout。

System.out.println(result);

或者

PrintWriter out = new PrintWriter(System.out);
out.println(result);
out.flush();

为了获得更好的性能(速度方面),我应该使用哪一个?为什么?

- 的修改 - BufferedWriter怎么样?

3 个答案:

答案 0 :(得分:0)

在不同的输出流中包装System.out并不会产生任何影响。它只会调用相同的方法。您的局限性在于创建数百万个小对象以及控制台接收,保存和显示所有内容的能力。

此外,设计一个简单的测试很容易。

public static void main(String[] args) {
    System.out.println();
    long start = 0L;

    start = System.currentTimeMillis();

    for(int i = 0; i <= 999999; i++)
        System.out.println(i);

    long printStreamTime = System.currentTimeMillis() - start;

    PrintWriter writer = new PrintWriter(System.out);

    System.gc();
    try {
        Thread.sleep(1000L);
    } catch(InterruptedException ie) {}

    start = System.currentTimeMillis();

    for(int i = 0; i <= 999999; i++)
        writer.println(i);

    long printWriterTime = System.currentTimeMillis() - start;

    System.out.println();

    System.out.println("PrintStream time = " + (printStreamTime / 1000.0));
    System.out.println("PrintWriter time = " + (printWriterTime / 1000.0));
}

我两个人都得到了49秒。几乎相同。

如果您想要速度,请写入文件并将其打开。

答案 1 :(得分:0)

PrintWritter可以提供更好的性能,尽管在较小的程序中时间差异并不明显。 Performace Graph 但是随着要打印的行数增加而变得很明显。 Performance Graph

我将这些代码片段的执行时间用于测试。 System.out.println(i)

class Sprint{
    public static void main(String[] args) {
        int n=10000000;
        for(int i=0;i<n;i++){
            System.out.println(i);
        }
    }
}

out.println(i);

import java.io.*;
class Pprint{
    public static void main(String[] args) {
        PrintWriter out = new PrintWriter(System.out);
        int n=10000000;
        for(int i=0;i<n;i++){
            out.println(i);
        }
        out.flush();
    }
}

我使用n = 10 10 ^ 7 ,并且每个n都执行了两次。 n的值超过10 ^ 3后,性能有明显的差异。

答案 2 :(得分:-1)

我的建议是使用PrintWriter以获得更好的时间性能,尽管时间差异在较小的程序中并不重要。对于较大的程序,您可能会注意到显着差 我已用System.out.println替换并运行PrintWriter,执行时间从0.06秒减少到0.05秒。

以下是类似问题的链接:https://discuss.codechef.com/questions/62586/systemoutprintln-vs-printwriter

希望有所帮助:)