Dart 控制台打印速度
为了找到更好的使用Dart编码的方法,我一直在看一些示例程序 并不是说这个例子(下面)有什么特别重要的意义,但是它是从rosettacode.org上取下来的,我做了一些修改(希望)使它更新 这篇文章的重点是关于基准测试,以及与其他语言相比,在某些基准测试中,在向控制台打印的速度方面,什么可能对Dart的结果有害。我不知道(与其他语言)的比较是什么,但是在Dart中,即使使用StringBuffer,控制台输出(至少在Windows中)也显得相当慢 另外,在我的测试中,如果允许n1增长到11,那么总递归计数=>2.38亿,需要(在我的笔记本电脑上)c。运行示例1需要2.9秒 此外,可能有趣的是,如果字符串赋值更改为int,而不进行打印,则不会将任何时间记录为已用时间(示例2) 在我的低规格笔记本电脑上的典型时间(从控制台-Windows运行) 显然,在这种情况下,控制台打印时间是相对于计算等时间的一个重要因素 那么,有谁能告诉我们这与控制台输出的Java时间相比如何?这至少表明Dart在这方面是否特别慢,这可能与一些基准有关。顺便说一句,在Dart编辑器中运行时,打印的代价可以忽略不计Dart 控制台打印速度,dart,Dart,为了找到更好的使用Dart编码的方法,我一直在看一些示例程序 并不是说这个例子(下面)有什么特别重要的意义,但是它是从rosettacode.org上取下来的,我做了一些修改(希望)使它更新 这篇文章的重点是关于基准测试,以及与其他语言相比,在某些基准测试中,在向控制台打印的速度方面,什么可能对Dart的结果有害。我不知道(与其他语言)的比较是什么,但是在Dart中,即使使用StringBuffer,控制台输出(至少在Windows中)也显得相当慢 另外,在我的测试中,如果允许n1增长到11,那
// 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));
}
}