程序执行时间

4

有没有一款软件/网站可以提交我的C、C++和Java代码,并获得程序执行时间、内存使用等统计信息?我想比较不同语言中相同代码的性能,并估算哪种数据结构/操作更适合哪种语言。


如果您正在寻找软件,建议提供您使用的平台,例如:win/linux/mac/... - Avada Kedavra
为什么不先在我们的本地系统上进行测试,这样对于比较来说不就足够了吗? - Oben Sonne
@Avada- 我三个都有,所以告诉我需要哪一个或全部都需要! - Appster
5个回答

7

自己动手。在*nix机器(例如Linux和OSX)上,只需从终端运行:

time java YourJavaProgram

或者

time ./YourCProgram

在Windows系统中,你可以编写一个小批处理脚本来完成相同的操作

这可能会受到在实际执行某些代码之前不同的启动时间的影响而产生偏差。 - Oben Sonne
他询问了程序的执行时间。启动时间是程序执行时间的一部分。 - Peter Alexander
没错,我只是想添加这个,不是因为我不确定 OP 是否意识到这种区别(特定部分与完整程序性能)。 - Oben Sonne

5
您可以将程序粘贴到ideone,它会告诉您执行时间和内存消耗。

实际上这正是我正在寻找的!非常感谢。当我的声望达到15时,我会回来投赞成票的。 - Appster

1
如果你想要获取函数的基准测试,使用"time"是不公平的。你应该在你的语言中编写以下内容。
time_before = get_now()
// do something
span = get_time() - time_before

1

可以通过java.lang.Runtime.getRuntime()在程序中获取程序的总使用/空闲内存。

运行时有几种与内存相关的方法。下面的代码示例演示了它的用法。

package test;

import java.util.ArrayList;
import java.util.List;

public class PerformanceTest {
  private static final long MEGABYTE = 1024L * 1024L;

  public static long bytesToMegabytes(long bytes) {
    return bytes / MEGABYTE;
  }

  public static void main(String[] args) {
    // I assume you will know how to create a object Person yourself...
    List<Person> list = new ArrayList<Person>();
    for (int i = 0; i <= 100000; i++) {
      list.add(new Person("Jim", "Knopf"));
    }
    // Get the Java runtime
    Runtime runtime = Runtime.getRuntime();
    // Run the garbage collector
    runtime.gc();
    // Calculate the used memory
    long memory = runtime.totalMemory() - runtime.freeMemory();
    System.out.println("Used memory is bytes: " + memory);
    System.out.println("Used memory is megabytes: "
        + bytesToMegabytes(memory));
  }
} 

使用 System.currentTimeMillis() 获取开始时间和结束时间,然后计算差值。
package performance.test;

class TimeTest1 {
  public static void main(String[] args) {

    long startTime = System.currentTimeMillis();

    long total = 0;
    for (int i = 0; i < 10000000; i++) {
      total += i;
    }

    long stopTime = System.currentTimeMillis();
    long elapsedTime = stopTime - startTime;
    System.out.println(elapsedTime);
  }
} 

1

这被称为基准测试,你可以自己做。问题在于许多其他变量会影响结果,因此最好控制环境并测量程序的性能,尽可能消除外部变量。

例如,建议在相同的机器上进行所有程序的测量,并使用相同的环境,尽可能实现这一点。


1
这实际上根本没有回答问题。如果你告诉他他可以自己做,难道不应该说一下如何实现吗? - Tom Macdonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接