Тестирование скорости записи java и c++

 
 
 
Сообщения:61
Вот он долгожданный тест! Я сделал 3 программы и скрипт на bash.
Первая программа на java:
import java.util.Date;
import java.io.*;

class tester
{
  public static void main(String[] args)
  {
    Test test;
    test = (str)-> {
      long start, stop;
      
      Date date = new Date();
      start = date.getTime();
      
      try( FileWriter f = new FileWriter("./TEST-FILE", false) )
      {
        for(int i=0;i<1000000;i++) //1 ГБ
          f.write(str);
      }
      catch(IOException e)
      {
        System.out.println("Ошибка: "+e);
      }
      
      date = new Date();
      stop = date.getTime();
      return (stop-start);
    };
    
    StringBuilder s = new StringBuilder("");
    for(int i=0; i<1024; i++) s.append("W"); //1 кб строка
    
    System.out.println(test.start(s.toString()));
  }
}

interface Test
{
  long start(String str); //возвращает миллисекунды
}

Вторая программа на C++:
#include <iostream>
#include <ctime>
#include <sys/time.h>
#include <fstream>

using namespace std;
int main()
{
  char str[1024];
  sprintf(str, "W"); //антибаг
  for(int i=0; i<1023; i++)
    sprintf(str, "%sW", str);

  struct timeval tp;
  long int start, stop;
  gettimeofday(&tp, NULL);
  start = tp.tv_sec * 1000 + tp.tv_usec / 1000;
  
  ofstream f("./TEST-FILE");
  for(int i=0;i<1000000;i++) //1 ГБ
    f<<str;
  f.close();
  
  gettimeofday(&tp, NULL);
  stop = tp.tv_sec * 1000 + tp.tv_usec / 1000;
  
  cout<<stop-start<<endl;
  return 0;
}

Они с одинаковым алгоритмом.
Третья программа для нахождения среднего значения:
// Программа для нахождения среднего значения из множества чисел
import java.io.*;
import java.util.*;

class medium
{
  public static void main(String[] args)
  {
    if(args.length != 1) {
     System.out.println("Использование: medium [файл]");
     System.exit(1);
    }
    
    System.out.println(getMediumNumber(args[0]));
  }
  
  static int getMediumNumber(String filename)
  {
    int avg=-1;
    try( BufferedReader f = new BufferedReader(new FileReader(filename)) )
    {
      String s;
      int sum=0, t, n=0;
      while( (s=f.readLine()) != null )
      {
        n++;
        try {
          t = Integer.parseInt(s);
        }
        catch(NumberFormatException e) {
          System.out.println("Ошибка: "+"\""+s+"\""+" не является целым числом или слишком большое!");
          t=0;
        }
        sum+=t;
      }
      avg=sum/n;
    }
    catch(IOException e) {
      System.out.println("Ошибка: "+e);
    }
    return avg;
  }
}

А теперь bash скрипт:
#!/bin/bash

declare -i i=1

for ((; i<=10; i++)); do
	echo "Тест java #$i"
	java tester >>result-java
done

((i=1))
for ((; i<=10; i++)); do
	echo "Тест C++ #$i"
	./tester >>result-c++
done

result1=$(java tester result-java)
result2=$(java tester result-c++)

echo "Результат java: $result1 ms"
echo "Результат c++: $result2 ms"

rm result-java result-c++


Компилируем все программы вот так:
javac tester.java && javac medium.java && g++ tester.cpp -o tester

Кладём bash скрипт в нашу отдельную папку с тестами и даём права:
chmod +x tst

Теперь запускаем скрипт:
./tst

Отписываемся о результатах в комментах! Если кто напишет инструкцию для windows буду рад, а мне лень.

Мои результаты:
Результат java: 18508 ms
Результат c++: 18409 ms

Программирование начинается с себя
 
 
Сообщения:75
Quote:
java 11.0.3 2019-04-16 LTS
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)

Linux Mint 17.1 3.13.0-170-generic x86_64
Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz
HDD Seagate Barracuda 7200 ST500DM002-1BD142

Запустил 3 раза:
Результат java: 10879/12374/7523 ms
Результат c++: 12256/11097/14221 ms

Spring по-русски!
spring-projects.ru
Изменен:22 авг 2019 12:11
 
 
Сообщения:825
Результат java: 3213 ms
Результат c++: 2755 ms

Samsung SSD 860 EVO 1 TB

java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Linux Mint 19.1
 
 
Сообщения:1550
Это не тестирование, а какой-то детский сад. Мало того, что задача синтетическая, так она еще находится под чрезвычайно большим влиянием нестабильного IO. И условия проведения теста неверные в принципе (hint: java native compilation).

Software and cathedrals are much the same — first we build them, then we pray.
Изменен:13 дек 2019 16:28
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет