1

这可能不是最重要的,但是我在测试期间注意到打印语句和标准输出的性能在 Dart-Editor 中比在命令行中快得多。从命令行打印的性能比从命令行使用 stdout 的时间长约 36%。但是,从编辑器中运行程序,使用 stdout 比在编辑器中使用 print 语句花费大约 900% 的时间,但两者都比从命令行快得多。IE。从编辑器中运行的程序打印所用时间大约是命令行所用时间的 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 中的性能要快得多吗?此外,使用标准输出是否可以接受,与使用打印相比有哪些优缺点?

4

1 回答 1

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);在循环中添加 a 会严重影响 dart 程序的性能,因为流被阻塞了。

应该使用标准输出吗?

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

为什么命令行中的标准输出更快?

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

于 2013-05-13T11:27:40.803 回答