Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / производительность Java vs C# / 25 сообщений из 27, страница 1 из 2
27.02.2013, 23:33
    #38168806
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Всё началось с поста 13903561 . Решил проверить скорость. Мой алгоритм был чуть длинне, но в итоге на 10% быстрее. Тестирование производилось в VFP. На диапазоне дней 30 000 000 время расчета составило 77 секунд для варианта предложенного человеком и примерно 66-67 секунд для моего.
Думаю дай тоже самое сделаю на С# и сравню с Java по скорости. Но выяснилась одна пренеприятнейшая вещь: в C# есть ограничение на макс. год (в Java таких ограничений нет), поэтому диапазон дней пришлось сократить с 30 000 000 до 2 900 000 дней.
Вот исходники тестов (GUI, обработчик на Click кнопки на форме)
C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DateTime StartMoment = new DateTime();
DateTime EndMoment = new DateTime();
DateTime StartDate = new DateTime(txtStartDate.Value.Year, txtStartDate.Value.Month, txtStartDate.Value.Day);
DateTime CurrentDate = new DateTime(txtStartDate.Value.Year, txtStartDate.Value.Month, txtStartDate.Value.Day);
            
StartMoment = DateTime.Now;
int Age1=0;
for (int i = 0; i <= txtIteration.Value; i++)
{
   Age1 = (((CurrentDate.Year - StartDate.Year) * 365 - 
                 StartDate.Month * 30 - StartDate.Day + 
                 CurrentDate.Month * 30 + CurrentDate.Day) / 365);
                CurrentDate = CurrentDate.AddDays(1);
}
EndMoment = DateTime.Now;
TimeSpan Span = EndMoment - StartMoment;

lstResult.Items.Add("начальная дата - " + StartDate.ToLongDateString());
lstResult.Items.Add("начало         - " + StartMoment.ToLongTimeString());
lstResult.Items.Add("конечная дата  - " + CurrentDate.ToLongDateString());
lstResult.Items.Add("окончание      - " + EndMoment.ToLongTimeString());
lstResult.Items.Add("возраст        - " + Age1.ToString());
lstResult.Items.Add("время          - " + Span.TotalSeconds.ToString());


Java (такой же обработчик клика на кнопке)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Calendar brDate = jDateChooser1.getCalendar();
Calendar currentDate=Calendar.getInstance();
long numberItem = Integer.parseInt(jTextField1.getText());
int age = 0;
Calendar startDate = Calendar.getInstance();
for (int i = 0; i < numberItem; i++) {
 int brYear = brDate.get(Calendar.YEAR);
 int currentYear = currentDate.get(Calendar.YEAR);
 int brMonth = brDate.get(Calendar.MONTH);
 int currentMonth = currentDate.get(Calendar.MONTH);
 int brDay = brDate.get(Calendar.DATE);
 int currentDay = currentDate.get(Calendar.DATE);
 age = ((currentYear-brYear)*10000 +
          (currentMonth-brMonth)*100 +
 (currentDay-brDay))/10000;
 // увеличиваем число на один день
 currentDate.add(Calendar.DATE,1);
}
Calendar endDate  = Calendar.getInstance();
long timeTest = endDate.getTimeInMillis()-startDate.getTimeInMillis();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
jTextArea1.append("Дата рождения: " + dateFormat.format(brDate.getTime())+"\n");
jTextArea1.append("Возраст:"+String.valueOf(age)+"\n");
jTextArea1.append("Дата окончания цикла:"+dateFormat.format(currentDate.getTime())+"\n");
jTextArea1.append("время теста:"+String.valueOf(timeTest)+" миллисек\n");


Было взято 2 тестовые машины: 1-я - Athlon X2 64 Dual 3800+, 2.0ГГц, вторая - Intel Core i5-2430 2.4ГГц до 3ГГц (турбо),
На обеих машинах Windows 7 Pro, .NET 4.0.xxxx, Java 7, IDE - NetBeans.
Платформа АМД (сек) Интел (сек).NET C# ~3.66 ~1.2Java~3.56~0.5
Я, конечно, был шокирован и огорчен. Такой подставы от MS не ожидал. Ну, думаю, наверное какая-то особенность .NET при работе с датой. Дай-ка другой тест сделаю - решето Эратосфена . На этот раз создавались консольные тестовые приложения. Ниже приводиться текст только главной процедуры:
C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  DateTime Start = new DateTime();
  DateTime End = new DateTime();
  Start = DateTime.Now;
  int UpperBound = 200000000;
  bool[] PrimeNumbers = new bool[UpperBound];
  for (int i = 2; (i * i) < UpperBound; i++)
  {
     if (!PrimeNumbers[i])
       for (int j = (i * i); j < UpperBound; j += i)
         PrimeNumbers[j] = true;
  }
  End = DateTime.Now;
  Console.WriteLine("Calculation time is {0}s", (End-Start).TotalSeconds);
  Console.WriteLine("Press Enter to continue ...");
  Console.Read();


Тоже самое, но на Java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int N = 20000000;
boolean[] isPrime = new boolean[N] ;
Arrays.fill(isPrime, true);
isPrime[1] = false;
for (int i = 2; i * i < N; i++) {
  if (isPrime) {
    for (int j = i * i; j < N; j += i) {
      isPrime[j] = false;
    }
  }


Ну и рез-таты:
Платформа АМД (сек) Интел (сек).NET C# ~9.02 ~2.9Java~0.78~0.254
Я ничего , конечно, утверждать не буду, но какого хрена MS делает ? Что это такое ? Это означает, что .NET платформа - полная лажа и если при работе с объектами разница не столь велика, то при работе с памятью совсем всё плохо.
Может я что-то не так делаю ?
...
Рейтинг: 0 / 0
27.02.2013, 23:42
    #38168821
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2Это означает, что .NET платформа - полная лажа
а куда спешить?
...
Рейтинг: 0 / 0
27.02.2013, 23:44
    #38168825
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2Может я что-то не так делаю
Определённо да.
...
Рейтинг: 0 / 0
27.02.2013, 23:44
    #38168826
Гудрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2
Код: c#
1.
  int UpperBound = 200000000;


Тоже самое, но на Java
Код: java
1.
int N = 20000000;


на .net на граница порядок больше
...
Рейтинг: 0 / 0
27.02.2013, 23:47
    #38168833
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2,
Это точно одинаковые строки?
Код: c#
1.
2.
C# if (!PrimeNumbers[i])
Java  if (isPrime)
...
Рейтинг: 0 / 0
27.02.2013, 23:52
    #38168842
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Гудронthunder2
Код: c#
1.
  int UpperBound = 200000000;


Тоже самое, но на Java
Код: java
1.
int N = 20000000;


на .net на граница порядок больше

Точно ! Щас чел поправит, перезапущу и проверим.
...
Рейтинг: 0 / 0
27.02.2013, 23:54
    #38168846
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
beg-in-erthunder2,
Это точно одинаковые строки?
Код: c#
1.
2.
C# if (!PrimeNumbers[i])
Java  if (isPrime)


Да, одинаково. Просто в Jave можно заполнить массив нужным значением, а в C# - нет. Поэтому, исходя из того, что после new PrimeNumbers(UpperBound) массив заполнен false, то я просто инвертировал в алгоритме признак "зачеркивания". Вот и всё.
...
Рейтинг: 0 / 0
28.02.2013, 00:03
    #38168854
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2
Да, одинаково.[/quot]
ну мож быть
только странно
как Java интерпретирует такую строку. на весь массив или на элемент. только на какой
if (isPrime)
...
Рейтинг: 0 / 0
28.02.2013, 00:07
    #38168860
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2,

вы бы для начала ртфм queryperformanceblablabla функции для замера времени. потом ртфм .net, а потом написали бы близкие на сколько позволяют знания алгоритмы.
...
Рейтинг: 0 / 0
28.02.2013, 00:08
    #38168861
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Гудронthunder2
Код: c#
1.
  int UpperBound = 200000000;


Тоже самое, но на Java
Код: java
1.
int N = 20000000;


на .net на граница порядок больше

Поправили, вот рез-тат.
Платформа АМД (сек) Интел (сек).NET C#~9.02 ~2.9Java~9.4~2.75

Прощу прощения за ложную тревогу. Хоть с объектами Java работает чу-у-у-точку быстрее, но алгоритмы обрабатываются практически одинаково или в пределах статистической погрешности.
...
Рейтинг: 0 / 0
28.02.2013, 00:14
    #38168864
Гудрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2, вы все таки поясните, что значит конструкция
Код: java
1.
if (isPrime)

скорее всего это раскрывается как
Код: java
1.
if (isPrime != null)

, что в вашем контексте всегда true. на .net вместо этого обращение в память
...
Рейтинг: 0 / 0
28.02.2013, 00:22
    #38168868
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
for ( int k = 0; k < 20; k++ )
{
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    int upperBound = 20000000;
    bool[] primeNumbers = new bool[ upperBound ];

    for ( int i = 2; ( i * i ) < upperBound; i++ )
    {
        if ( !primeNumbers[ i ] )
            for ( int j = ( i * i ); j < upperBound; j += i )
                primeNumbers[ j ] = true;
    }

    stopWatch.Stop();

    Console.WriteLine( "Calculation time is {0}s", stopWatch.Elapsed.TotalSeconds );
}
Console.WriteLine( "Press Enter to continue ..." );
Console.Read();



Intel(R) Core(TM) i7-960 3.20 GHz

Calculation time is 0,2178724s
Calculation time is 0,2179551s
Calculation time is 0,1979096s
Calculation time is 0,2215236s
Calculation time is 0,1934516s
Calculation time is 0,1826872s
Calculation time is 0,1691474s
Calculation time is 0,1761205s
Calculation time is 0,167197s
Calculation time is 0,1675593s
Calculation time is 0,1647399s
Calculation time is 0,1656472s
Calculation time is 0,1666657s
Calculation time is 0,200919s
Calculation time is 0,2177192s
Calculation time is 0,1987847s
Calculation time is 0,1789138s
Calculation time is 0,1720064s
Calculation time is 0,1645467s
Calculation time is 0,1679415s
...
Рейтинг: 0 / 0
28.02.2013, 00:31
    #38168872
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Гудронthunder2, вы все таки поясните, что значит конструкция
Код: java
1.
if (isPrime)

скорее всего это раскрывается как
Код: java
1.
if (isPrime != null)

, что в вашем контексте всегда true. на .net вместо этого обращение в память

Ребята, просто "[]" при вставке в пост потерялись. Есть они в исходнике, только что проверил. Просто код на Java не я писал, а другой человек (не воспринимайте как отмазку, рельно так) ну и при копировании из аськи скобки потерялись.
...
Рейтинг: 0 / 0
28.02.2013, 00:46
    #38168878
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
skyANA
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
for ( int k = 0; k < 20; k++ )
{
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    int upperBound = 20000000;
    bool[] primeNumbers = new bool[ upperBound ];

    for ( int i = 2; ( i * i ) < upperBound; i++ )
    {
        if ( !primeNumbers[ i ] )
            for ( int j = ( i * i ); j < upperBound; j += i )
                primeNumbers[ j ] = true;
    }

    stopWatch.Stop();

    Console.WriteLine( "Calculation time is {0}s", stopWatch.Elapsed.TotalSeconds );
}
Console.WriteLine( "Press Enter to continue ..." );
Console.Read();



Intel(R) Core(TM) i7-960 3.20 GHz

Calculation time is 0,2178724s
Calculation time is 0,2179551s
Calculation time is 0,1979096s
Calculation time is 0,2215236s
Calculation time is 0,1934516s
Calculation time is 0,1826872s
Calculation time is 0,1691474s
Calculation time is 0,1761205s
Calculation time is 0,167197s
Calculation time is 0,1675593s
Calculation time is 0,1647399s
Calculation time is 0,1656472s
Calculation time is 0,1666657s
Calculation time is 0,200919s
Calculation time is 0,2177192s
Calculation time is 0,1987847s
Calculation time is 0,1789138s
Calculation time is 0,1720064s
Calculation time is 0,1645467s
Calculation time is 0,1679415s
Хочу интеловый проц ))) И за StopWatch спасибо, пока бенчмарком не занялся не требовалось.
...
Рейтинг: 0 / 0
28.02.2013, 00:49
    #38168880
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2,
по сабжу , как то тестил алгоритм с массивом интов в шарпе и на сях. скорость си-кода была на 40-70% быстрее.
авторFor vs Linq 2,9705883139307
linq vs cpp 5,19159001215819
c# vs cpp 1,74766391822522
аглоритм
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXPORT int ZZZZ(int* nn, int* nn2,int a1, int a2,int size)
{
	  int Bingo=0;
      int sz=size;
            for (int q = 0; q < sz; q++)
                if (zzz1[q] < a1 && zzz1[q] > a2 && zzz2[q] < a2)
      Bingo++;
	  return Bingo;
}

...
Рейтинг: 0 / 0
28.02.2013, 00:50
    #38168882
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
thunder2,
авторХочу интеловый проц )
таки да, при равных процах Intel и AMD скорость может раза в 2 отличатся. проверено. факт. кэша 3го уровня нема.
...
Рейтинг: 0 / 0
28.02.2013, 01:25
    #38168891
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Подгоняем под ответ (Intel i5(TM) 2.79GHz)
Average calculation time is 0.287077835s

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
using System;
using System.Collections;
using System.Diagnostics;

namespace PerformanceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            /*  
                Average calculation time is 0.287077835s
                Press Enter to continue ...
            */

            const int upperBound = 20000000;
                                   
            var stopWatch = new Stopwatch();

            stopWatch.Start();

            for (int k = 0; k < 20; k++)
            {
  
                var primeNumbers = new BitArray(upperBound, true);
                primeNumbers.Set(1, false);
                for (int i = 2; (i * i) < upperBound; i++)
                {
                    if (primeNumbers.Get(i))
                        for (int j = (i * i); j < upperBound; j += i)
                            primeNumbers.Set(j, false);
                }
            }
            stopWatch.Stop();
            Console.WriteLine("Average calculation time is {0}s", stopWatch.Elapsed.TotalSeconds / 20.0);
            Console.WriteLine("Press Enter to continue ...");

            Console.Read();
        }
    }
}

...
Рейтинг: 0 / 0
28.02.2013, 06:47
    #38168959
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
еще раз убедился в ничтожности AMD процессоров ) да здравствует Интел :) Хаель Интель :))

спасибо, почитал с интересом, хорошо, что в результате оказалось всё не так печально :)

и мне не понятны нападки на автора, если вы опытнее и умнее, это не повод язвить, а повод помочь, если вы действительно умнее конечно же :)
...
Рейтинг: 0 / 0
28.02.2013, 08:08
    #38168981
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Roman Mejtesи мне не понятны нападки на автора, если вы опытнее и умнее, это не повод язвить, а повод помочь, если вы действительно умнее конечно же :)Где Вы в этой теме увидели нападки, милейший? Или о чём Вы вообще?
...
Рейтинг: 0 / 0
28.02.2013, 08:16
    #38168989
netivan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
а вы кстапти под какой Нет запускали? конфигурация release,debug?
...
Рейтинг: 0 / 0
28.02.2013, 17:40
    #38169987
Denis.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Calculation time is 0,11987s
Calculation time is 0,1194984s
Calculation time is 0,1208818s
Calculation time is 0,1192995s
Calculation time is 0,1210231s
Calculation time is 0,1181089s
Calculation time is 0,1242443s
Calculation time is 0,1203632s
Calculation time is 0,1217521s
Calculation time is 0,1225252s
Calculation time is 0,1222915s
Calculation time is 0,1194903s
Calculation time is 0,1210633s
Calculation time is 0,1183725s
Calculation time is 0,1199313s
Calculation time is 0,1188609s
Calculation time is 0,1205498s
Calculation time is 0,1190239s
Calculation time is 0,1201824s
Calculation time is 0,1189037s
Press Enter to continue ...



i7-2600k
...
Рейтинг: 0 / 0
28.02.2013, 17:41
    #38169990
Denis.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static class Program
    {
        private static void Main(string[] args)
        {
            var stopWatch = new Stopwatch();
            for (int k = 0; k < 20; k++)
            {
                stopWatch.Restart();
                var primeNumbers = new bool[20 * 1000 * 1000];

                for (int i = 2; i * i < primeNumbers.Length; i++)
                    if (!primeNumbers[i])
                        for (int j = i * i; j < primeNumbers.Length; j += i)
                            primeNumbers[j] = true;

                stopWatch.Stop();

                Console.WriteLine("Calculation time is {0}s", stopWatch.Elapsed.TotalSeconds);
            }
            Console.WriteLine("Press Enter to continue ...");
            Console.Read();
        }
    }
...
Рейтинг: 0 / 0
01.03.2013, 08:48
    #38170495
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Denis.,

можно создать тему, где все на своих драндулетах сделают тест и напишут конф. системы )
...
Рейтинг: 0 / 0
01.03.2013, 09:57
    #38170543
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
netivanа вы кстапти под какой Нет запускали? конфигурация release,debug?
+1
...
Рейтинг: 0 / 0
01.03.2013, 12:43
    #38170808
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
производительность Java vs C#
Производительность очень зависит от Вашего кода.
Есть много, друг Горацио, что и не снилось всяким-там мудрецам.
В яве имеется очень много нативных программ, написанных на сях, а то и на ассемблере. Та же самая фигня имеется в дотнет.
Короче, сравнивать - глупо и бессмысленно.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / производительность Java vs C# / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]