最佳答案
我发现 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秒。
正在使用 mingw 将 C 编译为 Windows 可执行文件。
我一直认为 C/C + + 比 C # .net 更快,或者至少可以和 C # .net 相媲美。究竟是什么原因导致 C 代码运行速度慢了30倍?
编辑:
看起来 C # 优化器正在删除根目录,因为它没有被使用。
我将根赋值改为 root +=
,并在最后打印出总数。
我还使用 cl.exe 编译了 C 语言,并将/O2标志设置为 max speed。
结果如下: C 组3.75秒 C # 的成绩是2.61秒
C 调仍然需要更长的时间,但这是可以接受的。