powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / производительность Java vs C#
25 сообщений из 27, страница 1 из 2
производительность Java vs C#
    #38168806
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё началось с поста 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
производительность Java vs C#
    #38168821
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2Это означает, что .NET платформа - полная лажа
а куда спешить?
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168825
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2Может я что-то не так делаю
Определённо да.
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168826
Гудрон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
thunder2
Код: c#
1.
  int UpperBound = 200000000;


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


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


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


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

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


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

вы бы для начала ртфм queryperformanceblablabla функции для замера времени. потом ртфм .net, а потом написали бы близкие на сколько позволяют знания алгоритмы.
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168861
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гудрон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
производительность Java vs C#
    #38168864
Гудрон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
thunder2, вы все таки поясните, что значит конструкция
Код: java
1.
if (isPrime)

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

, что в вашем контексте всегда true. на .net вместо этого обращение в память
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168868
Фотография 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
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168872
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гудронthunder2, вы все таки поясните, что значит конструкция
Код: java
1.
if (isPrime)

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

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

Ребята, просто "[]" при вставке в пост потерялись. Есть они в исходнике, только что проверил. Просто код на Java не я писал, а другой человек (не воспринимайте как отмазку, рельно так) ну и при копировании из аськи скобки потерялись.
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168878
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
производительность Java vs C#
    #38168880
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
производительность Java vs C#
    #38168882
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2,
авторХочу интеловый проц )
таки да, при равных процах Intel и AMD скорость может раза в 2 отличатся. проверено. факт. кэша 3го уровня нема.
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168891
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подгоняем под ответ (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
производительность Java vs C#
    #38168959
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз убедился в ничтожности AMD процессоров ) да здравствует Интел :) Хаель Интель :))

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

и мне не понятны нападки на автора, если вы опытнее и умнее, это не повод язвить, а повод помочь, если вы действительно умнее конечно же :)
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168981
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesи мне не понятны нападки на автора, если вы опытнее и умнее, это не повод язвить, а повод помочь, если вы действительно умнее конечно же :)Где Вы в этой теме увидели нападки, милейший? Или о чём Вы вообще?
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38168989
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вы кстапти под какой Нет запускали? конфигурация release,debug?
...
Рейтинг: 0 / 0
производительность Java vs C#
    #38169987
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
производительность Java vs C#
    #38169990
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
производительность Java vs C#
    #38170495
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.,

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


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