C# から ummanaged dll を呼び出しているので、C# と C での for ループのパフォーマンスについてテストを行いました。
結果は、ループがより大きな範囲に行くにつれて、C# のパフォーマンスが C に比べて低下するという点で私を驚かせました.狭い範囲では、C# は C よりも優れたパフォーマンスを示しました....しかし、for ループの上位範囲として増加すると、C と比較して C# のパフォーマンスが低下します....
これが私のテストコードです....
[DllImport("Testing.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int SumLoop(int lowLimit, int highLimit);
public static void Main(string[] args)
{
const int LowerRange = 1;
const int HigherRange = 1000000;
// Test with C# For Loop
var watch1 = new Stopwatch();
watch1.Start();
int sum = 0;
for (int i = LowerRange; i <= HigherRange; i++)
{
sum += i;
}
watch1.Stop();
long elapseTime1 = watch1.ElapsedMilliseconds;
// Test with C-for loop
var watch2 = new Stopwatch();
watch2.Start();
int sumFromC = SumLoop(LowerRange , HigherRange);
long elapseTime2 = watch2.ElapsedMilliseconds;
}
Testing.dll:
__declspec(dllexport) int SumLoop(int lowLimit, int highLimit)
{
int idx;
int totalSum = 0;
for(idx = lowLimit;idx<= highLimit; idx= idx +1)
{
totalSum += idx;
}
return totalSum;
}
テスト結果:
テスト 1 :
より高い範囲: 1000000
C# ループ: 4 ミリ秒
Cループ:9ミリ秒
テスト 2 :
より高い範囲: 10000000
C# ループ: 53 ミリ秒
Cループ:36ミリ秒
テスト 3 :
より高い範囲: 100000000
C# ループ: 418 ミリ秒
Cループ:343ミリ秒
ここで、C for ループのパフォーマンスが C# ループよりも優れていることを目的として上記のテストを開始しましたが、私の理解では正反対になり、この質問に同意して同意しました...しかし、for ループの上限範囲を増やすと、 CのパフォーマンスはC#と比較してうまくいきます...
今、私は、テストのアプローチが間違っているのか、それとも期待されるパフォーマンス結果なのかと考えています.