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

_>Здравствуйте, 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...
Пока на собственное сообщение не было ответов, его можно удалить.