Я нахожу значительные различия в производительности между похожим кодом в C anc С#.
Код 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);
}
И С# (консольное приложение):
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));
}
}
}
С приведенным выше кодом С# завершается в 0.328125 секунд (версия выпуска), а C занимает 11.14 секунды для запуска.
c скомпилируется в исполняемый файл Windows с помощью mingw.
Я всегда полагал, что C/С++ быстрее или, по крайней мере, сопоставим с С#.net. Что именно заставляет C работать более 30 раз медленнее?
EDIT: Похоже, что оптимизатор С# удалял корень, поскольку он не использовался. Я изменил назначение корня на root + = и распечатал итоговое значение в конце. Я также скомпилировал C, используя cl.exe, с флагом /O 2, установленным для максимальной скорости.
Результаты: 3,75 секунды для C 2,61 секунды для С#
C все еще занимает больше времени, но это приемлемо