Re[5]: Сравнение производительности Java 1.5 и .Net 2.0
От: anton_t Россия  
Дата: 13.11.05 12:58
Оценка:
Здравствуйте, rjikzy, Вы писали:

R>Абсолютно согласен. Я сравнивал производительность сортировок Java и С, так вот, в среднем мои замеры показали что Java отстает от С на 10-12 процентов на массивах различной длинны (от 1000 до 100000). Если верить этому тесту, то .NET выполнит те же операции на 38%-40%, что само по себе абсурд. Так что все это провокация, это нереально.


Program.cs:
using System;
using System.Collections.Generic;
using System.Text;

namespace SortSpeed
{
    class Program
    {
        static void Sort(double[] arr)
        {
            int len = arr.Length;
            bool notSorted = true;
            double tmp;
            while (notSorted) {
                notSorted = false;
                for (int i = 0; i < len - 1; ++i) {
                    if (arr[i] > arr[i + 1]) {
                        tmp = arr[i];
                        arr[i] = arr[i + 1];
                        arr[i + 1] = tmp;
                        notSorted = true;
                    }
                }
            }
        }

        static void Main(string[] args)
        {
            int len = 10000;
            try {
                len = int.Parse(args[0]);
            } catch (Exception ex){
            }

            double[] arr = new double[len];
            Random rand = new Random();
            for (int i = 0; i < len; i++) {
                arr[i] = rand.NextDouble();
            }
            DateTime d1 = DateTime.Now;
            Sort(arr);
            DateTime d2 = DateTime.Now;
            Console.Out.WriteLine(string.Format("{0} - {1}", len, (d2 - d1).ToString()));
        }
    }
}

test.java:
import java.util.Date;
import java.util.Random;
import java.text.SimpleDateFormat;

public class test
{
    public static void main(String[] args)
    {
        int len = 10000;
        try {
            len = Integer.parseInt(args[0]);
        } catch (Exception ex){
        }
        double[] arr = new double[len];
        Random rand = new Random();
        for (int i = 0; i < len; i++) {
            arr[i] = rand.nextDouble();
        }
        Date d1 = new Date();
        Sort(arr);
        Date d2 = new Date();
        Date diff = new Date(d2.getTime() - d1.getTime());
        SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss.SSSSSSS");
        System.out.println(len + " - " + format.format(diff));
    }

    static void Sort(double[] arr)
    {
        int len = arr.length;
        boolean notSorted = true;
        double tmp;
        while (notSorted) {
            notSorted = false;
            for (int i = 0; i < len - 1; ++i) {
                if (arr[i] > arr[i + 1]) {
                    tmp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = tmp;
                    notSorted = true;
                }
            }
        }
    }
}


Эксперимент:
D:\home\tests\SortSpeed>java test 40000
40000 - 07:00:20.0000453

D:\home\tests\SortSpeed>sortspeed 40000
40000 - 00:00:14.2655337

Я не специалист в Java, поэтому если уто-нибудь укажет, как побороть 7 часов, откуда-то вылезающие в явовской программе, то буду благодарен.
А так в общем видна разница в 30%.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.