Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
161 / 22 / 3
Регистрация: 05.02.2010
Сообщений: 207

Сравнение быстродействия c# и c++

06.04.2010, 14:05. Показов 11343. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это не бич .NET языков,а не понимание происходящего,
уверены? может сравним быстродействие С++ 6.0 c .NET языками? а?
тормознутость прог на этой платформе весьма очевидна!

запуск в другом потоке не решит проблему быстродействия, а автору поста следует почитать про использование прогрессбара - в таких случаях все его применяют (или его модификации), когда необходимо время на обработку инфы
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2010, 14:05
Ответы с готовыми решениями:

Сравнение быстродействия класса и структуры
Есть у меня такая задача как сравнить быстродействие программ, то есть написать класс и структуру,они должны выводить время и дату в...

Сравнение быстродействия алгоритмов сортировки слияния с сортировкой линейной выборкой
Ребят,помогите,пишу курсовую,не могу сравнить два метода,метод слияния с методом линейной выборки,никак не пойму как сравнить их...

Повышение быстродействия
Здравствуйте! ребята подскажите, 1с есть, база файловая, и мм от чего зависит как быстро разворачивается 1с на клиенте? возможно ли это...

36
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
06.04.2010, 23:38
Студворк — интернет-сервис помощи студентам
пришлось использовать релиз компиляцию, ибо на дебаге это всё работает гораздо медленней (и яное дело из-за чего)

прогнал у себя первый пример с выделением памяти на С++ (время в секундах)
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
#define N 1000000
int main(void)
{
    typedef unsigned char byte;
    long count = 0;
    long double resTime;
    unsigned long size;
    byte *buf;
 
    clock_t start = clock();
    printf("Start! Now time: %lf \n", (long double) (start / CLOCKS_PER_SEC));
    for (int i = 0; i < N; i++)
    {
        for (byte n = 1; n < 11; n++)
        {
            size = n * 1024;
            count += size;
            buf = new byte[size];
            for (unsigned long j = 0; j < size; j++)
            {
                buf[j] = n;
            }
            delete []buf;
        }
    }
    resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;
        
    printf(" All allocation: %d;\n Total volume: %d byte;\n Time: %lf", N * 10, count, resTime);
    printf("\n\n Press any key for exit...\n");
    _getch();
}
Результат:
Code
1
2
3
 All allocation: 10000000;
 Total volume: 485425152 byte; //почему получается меньше байт чем у HIMen'а - хз
 Time: 13.000000
для второго примера с факториалом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
unsigned long fact(unsigned long n)
{
    return (n == 0) ? 1 : n * fact(n - 1);
}
 
int main(void)
{
    long double resTime;
    clock_t start = clock();
    for (int i = 0; i < 1000000; i++)
    {
        unsigned long r = fact(65);
    }
    resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;
        
    printf(" Time: %lf", resTime);
    printf("\n\n Press any key for exit...\n");
    _getch();
}
Результат:
Code
1
 Time: 0.000000
третий тест с быстрой сортировкой
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
 
const int Q = 30;
void InsertSort(int* arr, int first, int last);
void RecQuickAndInsertSort(int* arr, int first, int last);
 
void QuickAndInsertSort(int* arr, int length)
{
    int* ptr = arr;
        if (length < Q)
        {
            InsertSort(ptr, 0, length - 1);
        }
        else
        {
            RecQuickAndInsertSort(ptr, 0, length - 1);
        }
}
void RecQuickAndInsertSort(int* arr, int first, int last)
{
    int p = arr[((last - first) >> 1) + first];
    int temp;
    int i = first, j = last;
    while (i <= j)
    {
        while (arr[i] < p && i <= last) i++;
        while (arr[j] > p && j >= first) j--;
        if (i <= j)
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }
    if (j - first - Q > 0)
    {
        RecQuickAndInsertSort(arr, first, j);
    }
    else if (j - first > 0)
    {
        InsertSort(arr, first, j);
    }
    if (i - last + Q < 0)
    {
        RecQuickAndInsertSort(arr, i, last);
    }
    else if (i - last < 0)
    {
        InsertSort(arr, i, last);
    }
}
void InsertSort(int* arr, int first, int last)
{
    int j;
    int index;
    for (int i = first; i < last + 1; i++)
    {
        index = arr[i];
        j = i;
        while ((j > 0) && (arr[j - 1] > index))
        {
            arr[j] = arr[j - 1];
            j = j - 1;
        }
        arr[j] = index;
    }
}
 
void main()
{
    srand( (unsigned)time( NULL ) );
    long double resTime;
    clock_t start = clock();
    int* arr = new int[1000000];
    for (int i = 0; i < 1000000; i++)
    {
        arr[i] = rand() % 100 - 50;
    }
    QuickAndInsertSort(arr, 1000000);
 
    resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;
    delete[] arr;       
    printf(" Time: %lf", resTime);
    printf("\n\n Press any key for exit...\n");
    _getch();
}
Результат:
Code
1
 Time: 0.171000
Всё компилировалось на VS 2005
0
161 / 22 / 3
Регистрация: 05.02.2010
Сообщений: 207
07.04.2010, 00:23  [ТС]
С++ победил!
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.04.2010, 00:46
Цитата Сообщение от kuroiryuu Посмотреть сообщение
для второго примера с факториалом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unsigned long fact(unsigned long n)
{
    return (n == 0) ? 1 : n * fact(n - 1);
}
int main(void)
{
    long double resTime;
    clock_t start = clock();
    for (int i = 0; i < 1000000; i++)
    {
        unsigned long r = fact(65);
    }
    resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;
printf(" Time: %lf", resTime);
    printf("\n\n Press any key for exit...\n");
    _getch();
}
Результат:
Code
1
 Time: 0.000000
Это прикол теперь такой? Вы 1000000 раз раскручивали рекурсию в 65 итераций и потратили на это мгновение? НЕ ВЕРЮ!!!

Добавлено через 4 минуты
Сейчас проверил у себя на машине
Code
1
2
3
 Time: 1.781000
 
 Press any key for exit...
Добавлено через 11 минут
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
#define N 1000000
int main(void)
{
    typedef unsigned char byte;
    long count = 0;
    long double resTime;
    unsigned long size;
    byte *buf;
 
    clock_t start = clock();
        printf("Start! Now time: %lf \n", (long double) (start / CLOCKS_PER_SEC));
    for (int i = 0; i < N; i++)
    {
                for (byte n = 1; n < 11; n++)
        {
                        size = n * 1024;
            count += size;
            buf = new byte[size];
            for (unsigned long j = 0; j < size; j++)
            {
                buf[j] = n;
            }
            delete []buf;
        }
    }
    resTime = (long double) (clock() - start) / CLOCKS_PER_SEC;
                
    printf(" All allocation: %d;\n Total volume: %d byte;\n Time: %lf", N * 10, count, resTime);
    printf("\n\n Press any key for exit...\n");
    _getch();
}
Code
1
2
3
4
5
6
Start! Now time: 0.000000
 All allocation: 10000000;
 Total volume: 485425152 byte;
 Time: 57.922000
 
 Press any key for exit...
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
07.04.2010, 01:14
Это прикол теперь такой? Вы 1000000 раз раскручивали рекурсию в 65 итераций и потратили на это мгновение? НЕ ВЕРЮ!!!
Скорее всего код был оптимизирован и выполнился лишь один шаг цикла.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.04.2010, 01:31
Вот результат полученный в wxDev-C++
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
07.04.2010, 01:33
Кстати, если уж проводить тесты, то на одной машине, а не на разных, и не забывать собирать проект в Release(и о возможно включённой/выключенной оптимизации тоже не стоит забывать ).
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
07.04.2010, 01:50
rangerx, кстати, оптимизация. Ведь как можно сравнивать два языка, и при этом использовать разные уровни оптимизации? Это как минимум нелогично. Ведь можно сравнить MS VS 10 C#.NET с BC++ 3.1 по времени выполнения. И что-то я сомневаюсь, что С++ обгонит(если догонит) C#. Давайте оговорим еще и этот факт
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
07.04.2010, 12:17
Gemor - вы так и не ответили на мой вопрос.
Посмотрите что человек написал.
Я благодарен всем за дискуссию, но моей целью является не ускорить программу а сделать видимость активности

Что такое прогресс бар я в курсе и даже если я применяю стиль для прогресс бара <B>Marquee</B> то во время подсчёта файлов он подвисает как и всё остальное.

А вот в чем я действительно слаб, так это в многопоточности, если расскажите подробнее буду благодарен
Средство от задумчивости программы
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
07.04.2010, 13:29
Цитата Сообщение от kuroiryuu Посмотреть сообщение
arr[i] = rand() % 100 - 50;
Время сортировки (как и положено) зависит от разброса чисел. Если в C# тоже сделать (-50, 50) то
Code
1
2
00:00:00.1230070
Для продолжения нажмите любую клавишу . . .
В тесте с выделением памяти может меньше байт, потому что он опять оптимизировал и пропустил какие-то итерации цикла. Количество байт меньше в 100 раз. А у меня на компе не могу проверить - виснет после 2 минут, виснет намертво - батарею вынимаю
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
07.04.2010, 14:51
понял, почему выводилось такое не понятное число в примере на выделение памяти...
мало того что флажок был не правильный... так еще и count надо было объявить как unsigned __int64
пришлось вывод заменить на:
C++
1
2
3
    std::cout << " All allocation: " << N * 10 << std::endl;
    std::cout << " Total volume: " << count << " byte." << std::endl;
    std::cout << " Time: " << resTime << std::endl;
запустил немного на другой машине (Intel Celeron 430, 1800 MHz (9 x 200) 64bit, памяти всего 512 Мб) и результаты немного странные...:
Code
1
2
3
 All allocation: 10000000
 Total volume: 56320000000 byte.
 Time: 9.062
PS до этого тестировал на 32 битном процессоре
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
08.04.2010, 02:37
Цитата Сообщение от Gemor Посмотреть сообщение
С++ победил!
Пока что с++ побеждает только с факториалом в wxDev-C++ Сравнение быстродействия c# и c++

Тест с выделением памяти хотелось бы увидеть на машине посильнее. Я все делаю на AMD Athlon 64 X2 Dual-Core Processor TK-57 1.9 Ghz, 2GB Ram, OS Windows 7 Ultimate 32bit

Аха) тот же тест с сортировкой после перезагрузки компа и смены фреймворка на .NET 4.0 Client Profile. Миллион интов (int.MinValue, int.MaxValue) за
Code
1
2
00:00:00.1370076
Для продолжения нажмите любую клавишу . . .
Сомневаюсь, что можно быстрее даже на С
Вложения
Тип файла: rar ConsoleApplication8.rar (2.4 Кб, 35 просмотров)
0
Просто хороший человек
 Аватар для sannee
392 / 182 / 24
Регистрация: 26.04.2011
Сообщений: 434
11.10.2011, 22:33
C# |-1
C++ |+1
сам писал на этих двух языках... понял что проги на C# действительно немного тормозят.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
24.10.2011, 13:31
Народ, заметили, что никто не сравнил и С++ и C# на одном компе? Или я не увидел пост, где кто-то сравнивал? Толку каждый у себя замеряет, ничего так не доказать.

Добавлено через 1 минуту
Да и тестить наверное надо по несколько раз. В равных условиях. А то на С++ можно затестить когда комп ничего не делает, а С# можно затестить во время сжатия 5-ти файлов. Потом сказать, что шарп тормозит неимоверно.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
24.10.2011, 13:35
Casper-SC, ну я сравнивал программу по работе с массивами на с# и на обычном с - ну код на шарпе чуть быстрее работал где-то на 2%. Ну это равным образом ничего не говорит. Надо сравнивать кучу разных параметров, а не только время. Плюс задача может была слишком простая.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
24.10.2011, 13:39
Цитата Сообщение от Eugene22 Посмотреть сообщение
Casper-SC, ну я сравнивал программу по работе с массивами на с# и на обычном с - ну код на шарпе чуть быстрее работал где-то на 2%. Ну это равным образом ничего не говорит. Плюс задача может была слишком простая.
Я думаю главное обеспечить равные условия. Тестить много-много раз и вывести средний результат думаю. Вообще запустить винду в безопасном режиме может и тестить? Задачи надо сделать по максимуму одинаковыми и сложными.

Цитата Сообщение от Eugene22 Посмотреть сообщение
Надо сравнивать кучу разных параметров, а не только время.
Каких например. И кстати в шарпе есть же Stopwatch, слышал он замеряет точнее чем DateTime.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
24.10.2011, 13:51
Цитата Сообщение от Casper-SC Посмотреть сообщение
Каких например. И кстати в шарпе есть же Stopwatch, слышал он замеряет точнее чем DateTime.
Я использовал DateTime...Правда у меня куча других приложений работало. Просто ради забавы решил сравнить быстродействие.
Просто программа может, конечно, и работать быстрее, но, допустим, пожирать все доступную память. То есть надо еще сравнивать по потреблению оперативки, или еще по потреблению видеопамяти и скорости работы с ней. Вообщем параметров для сравнения можно найти много. На одном быстродействии не стоит акцентироваться
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
24.10.2011, 14:08
Цитата Сообщение от Eugene22 Посмотреть сообщение
На одном быстродействии не стоит акцентироваться
Вот именно. Если проще окно с эффектами склепать на WPF, то нафига мне С++? Если на С++ проще написать (даже не знаю что) например аналог bass.dll, то нафига мне писать это на C# (незнаю, может пример не очень). Ну .NET по любому будет хавать оперативку нормально. Но тут есть одно но. Вот человек увидет как приложение на .NET схавало 50 мегабайт, но человек не подумал, что при надобности .NET освободит эту память. Короче тут помоему вообще надо проводить целое исследование с учётом всего, что только можно и вывода, какой язык быстрей однозначного не будет. Ведь опять же с какой стороны смотреть. По разработке красивого и эффектного интерфейса я думаю .NET быстрей . Короче спор зашёл в тупик. Надо было вообще спорить про конкретные вещи, что быстрее сделает 100000 итераций с выделением памяти С++ или C#.

Добавлено через 4 минуты
А ещё при выделении памяти можно использовать unsafe код.

Добавлено через 2 минуты
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Diagnostics;
 
namespace @unsafe
{
    class Program
    {
        static void Main(string[] args)
        {
            Safe(new byte[2]); //пусть скомпилит в натив на всякий случай для начала (в тиках заняло 15)
            Unsafe(new byte[2]); //пусть скомпилит в натив на всякий случай для начала (в тиках заняло 10)
 
            byte[] data = new byte[100 * 1024 * 1024];
 
            System.Threading.Thread.Sleep(2000);
 
            Safe(data);
            Unsafe(data);
 
            Console.ReadKey();
        }
 
        static void Safe(byte[] data)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
 
            byte[] table = new byte[256];
 
            for (int i = 1; i < data.Length - 1; i++)
                data[i] = table[data[i]];
 
            sw.Stop();
 
            Console.WriteLine("Safe: " + sw.ElapsedMilliseconds);
        }
 
        static void Unsafe(byte[] data)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
 
            unsafe
            {
                fixed (byte* start = data)
                {
                    byte* table = stackalloc byte[256];
 
                    byte* end = start + data.Length - 1;
                    byte* current = start + 1;
 
                    while (current < end)
                    {
                        *current = table[*current];
                        current++;
                    }
                }
            }
 
            sw.Stop();
            Console.WriteLine("Unsafe: " + sw.ElapsedMilliseconds);
        }
    }
}
Результат:
Safe: 875
Unsafe: 727
Вывод:
unsafe быстрее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2011, 14:08
Помогаю со студенческими работами здесь

Увеличение быстродействия
Дорогие форумчане, существует некоторая проблема быстродействия программы. Как увеличить быстродействие? Какие из способов существуют?

Параметры быстродействия
Доброе время суток. Подскажите, что можно сделать. При запуске системы выходит окно &quot;параметры быстродействия&quot; и пишет что файл...

Увеличение быстродействия
using System; class Entrypiont { static void Main() { string Input = Console.ReadLine().Split(' '); ...

Быстродействия программ на С++.
Можете посоветовать какие-то книжки по быстродействию. А то я пишу программы и даже не знаю, на какие действия и на сколько действуют на ее...

оценка быстродействия
Есть код программы, реализующей хаффмана.. нужно оценить быстродействие и коэффициент сжатия.. со вторым все понятно, а вот как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru