打印语句与stdout性能和Dart-Editor与命令行性能

时间:2013-05-13 10:23:43

标签: dart dart-editor

这可能不是很重要,但是我在测试期间注意到,在Dart-Editor中,print语句和stdout的性能要比命令行快得多。从命令行开始,打印性能比使用命令行中的stdout长约36%。但是,从编辑器中运行程序,使用stdout比在编辑器中使用print语句花费大约900%,但两者都比命令行快得多。即。从编辑器中运行的程序打印大约占命令行所用时间的2.​​65%。

基于我测试的平均表现的一些相对时间:

Running program from command line (5000 iterations) :
print   1700 milliseconds.
stdout  1245 milliseconds.

Running program within Dart-Editor (5000 iterations) :
print     45 milliseconds
stdout   447 milliseconds.

有人可以向我解释这些差异的原因 - 特别是为什么Dart-Editor中的表现要快得多?另外,使用stdout是否可以接受,与使用print相比有哪些优点和缺点?

1 个答案:

答案 0 :(得分:0)

为什么Dart编辑器更快?

因为命令行的输出处理速度非常慢,这会阻塞输出流,然后调用print / stdout。

你可以自己测试一下 - 测试下面的java程序(当然有你自己的路径):

public static void main(String[] args) {
    try {
        // the dart file does print and stdout in a loop
        Process p = Runtime.getRuntime().exec("C:\\eclipse\\dart-sdk\\bin\\dart.exe D:\\DEVELOP\\Dart\\Console_Playground\\bin\\console_playground.dart");
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        StringBuffer buf = new StringBuffer();
        String line;
        while((line = in.readLine()) != null) {
            buf.append(line + "\r\n");
        }
        System.out.print(buf.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在我的机器上,这甚至比Dart编辑器稍微快一点(这可能会像缓冲输入并定期渲染它,但我真的不知道)。

您还会看到在循环中添加Thread.sleep(1);会严重影响dart程序的性能,因为流已被阻止。

是否应该使用stdout?

我认为这是非常主观的。我做一件事,让我更快地编写代码。当我只想转储变量时,我使用print(myvar);。但是对于stdout,你可以做这样的好事:stdout.addStream(new File(r"D:\test.csv").openRead());。当然,如果性能是一个问题,它取决于你的应用程序将如何使用 - 例如,由另一个程序(打印更快)调用命令行(由于某种原因stdout更快)。

为什么stdout在命令行中更快?

我不知道,抱歉。这是我测试的唯一一个print()速度较慢的环境,所以我猜它与控制台处理传入数据的方式有关。