Я нахожу огромные различия в производительности между похожим кодом в C anc C #.
Код C:
#include <stdio.h>
#include <time.h>
#include <math.h>
main()
{
int i;
double root;
clock_t start = clock();
for (i = 0 ; i <= 100000000; i++){
root = sqrt(i);
}
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
}
А C # (консольное приложение):
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
DateTime startTime = DateTime.Now;
double root;
for (int i = 0; i <= 100000000; i++)
{
root = Math.Sqrt(i);
}
TimeSpan runTime = DateTime.Now - startTime;
Console.WriteLine("Time elapsed: " + Convert.ToString(runTime.TotalMilliseconds/1000));
}
}
}
При использовании приведенного выше кода C # завершается за 0,328125 секунд (версия выпуска), а запуск C занимает 11,14 секунды.
C компилируется в исполняемый файл Windows, используя mingw.
Я всегда исходил из того, что C / C ++ были быстрее или, по крайней мере, сопоставимы с C # .net. Что именно заставляет C работать в 30 раз медленнее?
EDIT:
Похоже, что оптимизатор C # удалял рут, поскольку он не использовался.
Я изменил корневое назначение на root + = и распечатал итог в конце.
Я также скомпилировал C, используя cl.exe с флагом / O2, установленным для максимальной скорости.
Результаты теперь:
3,75 секунды для C
2,61 секунды для C #
C все еще занимает больше времени, но это приемлемо