1

これはおそらくそれほど重要ではありませんが、テスト中に、print ステートメントと stdout のパフォーマンスが、コマンドラインよりも Dart-Editor の方がはるかに高速であることに気付きました。コマンドラインからの印刷のパフォーマンスは、コマンドラインから 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 を使用する場合と比較して、長所と短所は何ですか?

4

1 に答える 1

0

Dart Editor が速いのはなぜですか?

コマンドラインによる出力処理は非常に遅く、これにより出力ストリームがブロックされ、続いて 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 プログラムのパフォーマンスに深刻な影響を与えることもわかります。

stdout を使用する必要がありますか?

それは非常に主観的なものだと思います。私は、たとえば、コードをより速く書けるようになることは何でもします。変数をダンプしたいだけのときは、を使用しますprint(myvar);。しかし、標準出力を使用すると、次のようなきちんとしたことができますstdout.addStream(new File(r"D:\test.csv").openRead());。もちろん、パフォーマンスが問題になる場合は、アプリケーションの使用方法によって異なります。たとえば、別のプログラム (印刷の方が高速) とコマンド ライン (何らかの理由で stdout の方が高速) から呼び出される場合などです。

コマンドラインで標準出力が速いのはなぜですか?

わかりません、すみません。print() が遅いテストした唯一の環境なので、コンソールが受信データを処理する方法に関係があると思います。

于 2013-05-13T11:27:40.803 に答える