Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 控制台打印速度_Dart - Fatal编程技术网

Dart 控制台打印速度

Dart 控制台打印速度,dart,Dart,为了找到更好的使用Dart编码的方法,我一直在看一些示例程序 并不是说这个例子(下面)有什么特别重要的意义,但是它是从rosettacode.org上取下来的,我做了一些修改(希望)使它更新 这篇文章的重点是关于基准测试,以及与其他语言相比,在某些基准测试中,在向控制台打印的速度方面,什么可能对Dart的结果有害。我不知道(与其他语言)的比较是什么,但是在Dart中,即使使用StringBuffer,控制台输出(至少在Windows中)也显得相当慢 另外,在我的测试中,如果允许n1增长到11,那

为了找到更好的使用Dart编码的方法,我一直在看一些示例程序

并不是说这个例子(下面)有什么特别重要的意义,但是它是从rosettacode.org上取下来的,我做了一些修改(希望)使它更新

这篇文章的重点是关于基准测试,以及与其他语言相比,在某些基准测试中,在向控制台打印的速度方面,什么可能对Dart的结果有害。我不知道(与其他语言)的比较是什么,但是在Dart中,即使使用StringBuffer,控制台输出(至少在Windows中)也显得相当慢

另外,在我的测试中,如果允许n1增长到11,那么总递归计数=>2.38亿,需要(在我的笔记本电脑上)c。运行示例1需要2.9秒

此外,可能有趣的是,如果字符串赋值更改为int,而不进行打印,则不会将任何时间记录为已用时间(示例2)

在我的低规格笔记本电脑上的典型时间(从控制台-Windows运行)

显然,在这种情况下,控制台打印时间是相对于计算等时间的一个重要因素

那么,有谁能告诉我们这与控制台输出的Java时间相比如何?这至少表明Dart在这方面是否特别慢,这可能与一些基准有关。顺便说一句,在Dart编辑器中运行时,打印的代价可以忽略不计

// Example 1. The base code for the test (Ackermann).

main() {
  for (int m1 = 0; m1 <= 3; ++m1) {
    for (int n1 = 0; n1 <= 4; ++n1) {
      print ("Acker(${m1}, ${n1}) = ${fAcker(m1, n1)}");
    }
  }
}

int fAcker(int m2, int n2) => m2==0 ? n2+1 : n2==0 ?
    fAcker(m2-1, 1) : fAcker(m2-1, fAcker(m2, n2-1));
//示例1。测试的基本代码(Ackermann)。
main(){

对于(intm1=0;m11),我使用Java进行了测试,这是一个有趣的练习

这个小测试的结果表明,Dart比Java在控制台输出上花费的时间要长约60%,使用每个测试的最快结果


在没有输出的“计算”速度方面,使用这个测试,m=3,n=10,Java的比较持续在530毫秒左右,而Dart为580毫秒。这意味着5950万次调用。n=11的Java炸弹(2.38亿次调用),我认为这是堆栈溢出。我并不是说这是一个确定的基准,但它表明了一些事情。Dart似乎在计算时间上非常接近,这是令人高兴的。我将Dart代码从使用“问号运算符”改为使用“如果”语句与Java相同,速度似乎稍快一些,约为10%或更高,情况似乎是一致的。

我对控制台打印进行了进一步测试,如下所示(示例1–Dart),(示例2–Java)

每种方法的最佳时间如下(100000次迭代):

飞镖47秒。
Java 22秒。
省道编辑器2.3秒。

虽然它不是惊天动地的,但它确实似乎说明了出于某种原因,
(a)Dart在控制台输出时速度很慢,
(b)Dart编辑器在控制台输出时速度非常快。
(c)在评估任何涉及控制台输出的性能时,都需要考虑到这一点,这正是我最初关注的

也许当他们有时间的时候:)如果认为值得的话,Dart团队可以看看这个

示例1-省道


//Dart-测试100000次控制台输出迭代//
秒表oTimer=新秒表();
main(){
//“热身”
对于(int i1=0;i1<20000;i1++){
打印(“快速棕色狐狸追逐…”);
}
oTimer.reset();
oTimer.start();
对于(int i2=0;i2<100000;i2++){
印刷品(“被追逐的棕色狐狸”);
}
oTimer.stop();
打印(“运行时间=${oTimer.elapsedMicroseconds/1000}毫秒”);
}
示例2-Java


公共类控制台001
{
//Java-测试100000次控制台输出迭代
公共静态void main(字符串[]args)
{
//热身

对于(int i1=0;i1)您刚才没有问过类似的问题吗?问题是windows控制台,而不是Dart。我想告诉您,但我想您已经看到了。是的,我确实记得问过类似的问题,尽管我“勾选了”答案,这不是一个确定的答案,而是一个假设。如果没有其他人使用Java进行测试,我将下载并测试它以查看比较。如果控制台打印速度相同,我将接受它是Windows。嗯,不,这不是假设,而是严酷的事实。我还可以避免您加载Java:它比Dar更快t、 但它也受到与Dart相同的影响-在控制台中运行时速度较慢,从IDEI运行时速度较快。我更改了上述代码,并将字符串“the quick brown…”分配给字符串变量并打印该变量。完整注释:考虑到这是为了测试控制台输出时间,我更改了上述代码并分配了字符串“quick brown…”转换为字符串变量并打印该变量。这似乎改变了性能-Dart(最佳)32秒,Java(最佳)18秒。这仍然会导致Dart花费的时间延长77%。由于不了解内部结构,我不确定这是否会产生影响,但它似乎显著改善了Dart时间。
// Example 1. The base code for the test (Ackermann).

main() {
  for (int m1 = 0; m1 <= 3; ++m1) {
    for (int n1 = 0; n1 <= 4; ++n1) {
      print ("Acker(${m1}, ${n1}) = ${fAcker(m1, n1)}");
    }
  }
}

int fAcker(int m2, int n2) => m2==0 ? n2+1 : n2==0 ?
    fAcker(m2-1, 1) : fAcker(m2-1, fAcker(m2, n2-1));
// Example 2 //
main() {
  fRunAcker(1);   // print
  fRunAcker(2);   // StringBuffer
  fRunAcker(3);   // no printing
}

void fRunAcker(int iType) {
  String sResult;
  StringBuffer sb1;
  Stopwatch oStopwatch = new Stopwatch();
  oStopwatch.start();
  List lType = ["Print", "StringBuffer", "no Printing"];
  if (iType == 2)   // Use StringBuffer
    sb1 = new StringBuffer();

  for (int m1 = 0; m1 <= 3; ++m1) {
    for (int n1 = 0; n1 <= 4; ++n1) {
      if (iType == 1)   // print
        print ("Acker(${m1}, ${n1}) = ${fAcker(m1, n1)}");
      if (iType == 2)   // StringBuffer
        sb1.write ("Acker(${m1}, ${n1}) = ${fAcker(m1, n1)}\n");
      if (iType == 3)   // no printing
        sResult = "Acker(${m1}, ${n1}) = ${fAcker(m1, n1)}\n";
    }
  }
  if (iType == 2)
    print (sb1.toString());
  oStopwatch.stop();
  print ("Elapsed Microseconds (${lType[iType-1]}) = "+ 
   "${oStopwatch.elapsedMicroseconds}");
}
int fAcker(int m2, int n2) => m2==0 ? n2+1 : n2==0 ?
    fAcker(m2-1, 1) : fAcker(m2-1, fAcker(m2, n2-1));

//Typical times on my low-spec laptop (run from the console).
   //   Elapsed Microseconds (Print) = 26002
   //   Elapsed Microseconds (StringBuffer) = 9000
   //   Elapsed Microseconds (no Printing)   = 3000
// Dart - Test 100,000 iterations of console output //

Stopwatch oTimer = new Stopwatch(); 

main() {
  // "warm-up"
  for (int i1=0; i1 < 20000; i1++) {
    print ("The quick brown fox chased ...");
  }


  oTimer.reset();
  oTimer.start();
  for (int i2=0; i2 < 100000; i2++) {
    print ("The quick brown fox chased ....");
  }
  oTimer.stop();
  print ("Elapsed time = ${oTimer.elapsedMicroseconds/1000} milliseconds");
}
  public class console001
  {
  // Java - Test 100,000 iterations of console output 

  public static void main (String [] args)
  {
     //  warm-up
     for (int i1=0; i1<20000; i1++)
     {
        System.out.println("The quick brown fox jumped ....");
     }

     long tmStart = System.nanoTime();
     for (int i2=0; i2<100000; i2++)
     {
        System.out.println("The quick brown fox jumped ....");
     }

     long tmEnd = System.nanoTime() - tmStart;
     System.out.println("Time elapsed in microseconds = "+(tmEnd/1000));
  }
}