Время выполнения программы - PullRequest
4 голосов
/ 20 июня 2011

Существует ли программное обеспечение / веб-сайт, на котором я могу представить свои коды на C, C ++ и Java и получить статистику, такую ​​как время выполнения программы, используемая память?Мне интересно сравнить один и тот же код на разных языках и получить оценку того, какие структуры данных / операции лучше подходят для какого языка.

Ответы [ 5 ]

7 голосов
/ 20 июня 2011

Сделай сам.На * nix-машине (например, Linux и OSX) просто запустите из терминала:

time java YourJavaProgram

или

time ./YourCProgram

В Windows вы можете написать небольшой пакетный скрипт чтобы сделать эквивалент.

5 голосов
/ 20 июня 2011

Вы можете вставить свою программу в ideone , и она сообщит вам время выполнения и потребление памяти.

1 голос
/ 24 января 2013

Общая используемая / свободная память программы может быть получена в программе через 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 голос
/ 20 июня 2011

, если вы хотите получить эталонный тест функций, использование «времени» не является справедливым.Вы должны написать следующее на вашем языке.

time_before = get_now()
// do something
span = get_time() - time_before
1 голос
/ 20 июня 2011

Это называется бенчмаркинг , и вы можете сделать это самостоятельно.Дело в том, что на результаты влияют многие другие переменные, поэтому было бы лучше контролировать среду и измерять производительность вашей программы, пытаясь исключить как можно больше внешних переменных.

Например, рекомендуетсяВыполните все измерения всех программ на той же машине, с той же средой, насколько это возможно.

...