2009年5月4日星期一

C#和C++性能比较

    从2005年学C#到现在,印象中一直是C++的性能要比C#的性能好,虽然微软官方宣称C#将来可能在某些应用上性能会超过C++,但至少在现在我们貌似还没有看到这一天的到来。.NET 比 C/C++ 慢是事实,Microsoft 提供的资料宣称 .NET 大约是 C/C++ 执行效率的 90%。XNA 则提供资料宣称 Managed DirectX 效率可以达到 Native DirectX 的 98%。


    今天偶尔看到《VC编译器和C#编译器的速度差异很大》一文,有点手痒就自己测了一把。平台VS2008,Release优化全开,C#采用3.5的framework,C++采用多字节字符集。测试结果如下:


不开启IO,测试100次:













C++动态内存890ms
C++静态内存812ms
C#669ms


开启IO,测试单次:



















C++动态内存流输出76391ms
C++静态内存流输出75796ms
C++动态内存CRT输出31859ms
C++静态内存CRT输出31984ms
C#31790ms


    这下连我自己也哑口无言了,早上我告诉了老廖这个“严重”的消息,这确实很让人兴奋。


    当然仅此一例不能草率的说明C#的性能已经超过了C++,但绝对可以说在某些情况下,C#的性能绝对不会比C++差。再也不能以性能的理由去拒绝C#,否则就是盲目崇拜了。可以认为C#已经是一门成熟的具有工业强度的优秀语言了。


本测试用到的代码:


C#代码:


using System;
using System.Collections.Generic;
using System.Text;

namespace Kick
{
class Program
{
static void Main(string[] args)
{
int[] store;
store = new int[10];
int sum = 0;
M.Cumput(90, 9, store);
sum = M.sum2();
Console.Write("总数: {0}", sum);
Console.ReadLine();
}
}
public class M
{
public static int sum;
public static int sum2()
{
return sum;
}
public static void Output(int[] store2)
{
for (int i = 9; i >= 0; --i)
{
Console.Write(" {0}", store2[i]);
}
Console.WriteLine();
sum++;
}
public static void Cumput(int score, int num, int[] store2)
{
if (score < 0 || score > (num + 1) * 10)
{
return;
}
if (num == 0)
{
store2[num] = score;
Output(store2);
return;
}
for (int i = 0; i <= 10; ++i)
{
store2[num] = i;
Cumput(score - i, num - 1, store2);
}
}
}
}


C++代码:


#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;

static int sum=0;
void output(int store[]);
void comput(int score,int num,int store[]);

int main()
{
system("color 9");
int *store;
store=new int[10];
comput(90,9,store);
cout<<"总的次数为:";
cout<<sum;
return 0;
}

void output(int store[])
{
for(int i=9;i>=0;--i)
{
cout<<setw(4)<<store[i];
}
cout<<endl;
sum++;
}

void comput(int score,int num,int store[])
{
if(score<0||score>(num+1)*10)
{
return;
}
if(num==0)
{
store[num]=score;
output(store);
return;
}
for(int i=0;i<=10;++i)
{
store[num]=i;
comput(score-i,num-1,store);
}
}


其他参考:


    《C#, C++, Java性能对比》


    《应用程序的性能: C# vs C/C++》


    《Is Managed Code Slower Than Unmanaged Code?》


 


 

没有评论:

发表评论