当我从 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;
}
测试.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 的性能表现良好......
现在,我在想测试的方法是错误的还是预期的性能结果?