【发布时间】:2015-02-11 16:44:12
【问题描述】:
当我从 C# 调用 ummanaged dll 时,我已经对 C# 和 C 中 for-loop 的性能进行了一些测试...
结果令我惊讶的是,随着循环越过更大的范围,C# 的性能与 C 相比有所下降。对于更小的范围,C# 表现出优于 C....但是,作为上限for-loop 增加,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# 循环,但这与我的理解完全相反,并同意 question 并同意......但是当我增加上限时for 循环的范围,C 的性能比 C# 好...
现在,我在想这是测试方法错误还是预期的性能结果?
【问题讨论】:
-
您在测试调试版本还是发布版本?
-
尝试发布版本。 C# 的调试版本可能会慢很多。
标签: c# c performance for-loop unmanaged