2014-01-24 3 views
0

Я хочу напечатать 1 миллион строк в stdout.System.out.println vs Сравнение производительности PrintWriter?

System.out.println(result); 

Или

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

Чтобы получить более высокую производительность (скорость мудры), которые один я должен использовать и почему?

- Редактировать - Как насчет BufferedWriter?

+5

ни, не не постить один миллионы строк для вывода. Также не беспокойтесь о том, как оптимизировать материал, который вы никогда не будете делать. –

+1

Это зависит от буфера, например, от проблемы с производителем. –

+0

@ user2310289 благодарит за предложение. Но у меня есть случай, когда мне нужно сделать именно это. – noooooooob

ответ

0

Wrapping 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 секунд для обоих. Почти одинаково.

Если вы хотите скорость, напишите файл и откройте его.

+0

Спасибо за ответ. Будет ли логическое выражение «auto flush» иметь какое-либо значение? http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html#PrintWriter%28java.io.OutputStream,%20boolean%29 – noooooooob

0

Мое предложение - использовать PrintWriter для повышения производительности, хотя разница во времени не велика. Я заменил и запустил System.out.println с PrintWriter, и мое время выполнения сократилось с 0,06 секунды до 0,05 сек.

Вот ссылка на подобный вопрос: https://discuss.codechef.com/questions/62586/systemoutprintln-vs-printwriter

Надеется, что это помогает :)

Смежные вопросы