我发现在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代码运行速度变慢了30倍以上?
编辑:
似乎C#优化器删除了未被使用的root。我将root赋值改为root +=
并在最后打印总数。
我还使用了带有/O2标志的cl.exe编译了C,以达到最大速度。
现在的结果是:
C为3.75秒
C#为2.61秒
C仍然需要更长时间,但这是可以接受的。