Cと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は、mingwを使用してWindows実行可能ファイルにコンパイルされています。
私は常に、C / C ++がC#.netより高速であるか、少なくともC#.netに匹敵するという仮定の下にありました。正確には、Cの実行速度が30倍以上遅いのはなぜですか。
編集:C#オプティマイザーが使用されていなかったため、ルートを削除していたようです。ルートの割り当てをルート+ =に変更し、最後に合計を出力しました。また、/ O2フラグを最大速度に設定してcl.exeを使用してCをコンパイルしました。
結果は次のとおりです。Cの場合3.75秒C#の場合2.61秒
Cはまだ時間がかかりますが、これは許容範囲です