c++/clr与c#的性能比较

  前一段时间在网上搜到一个比较c++与c#性能的网页。网址记不大清楚了,猜想也是从网上其它的站点采集过来的。

  在此复述其中的内容,大体是对同一个问题采用同种设计算法的性能比较。

  看完之后,我觉得这个比较有一个不合理的地方。从语言运行时来说,c++拥有其先天优势,对于在clr上运行的c#来说,显然是种以强欺弱的比较。

  合理的比较应该如下,1.将c#编译为本地目标代码(MONO上有aot);2.c++完全使用托管库。

  在此我采用第二种比较方式,实现斐波那契的递归算法。

  代码如下:

using System;

namespace comparecsspp

{

class Program

{

static int foo(int n)

{

if (n == 1 || n == 2)

{

return 1;

}

return foo(n - 1) + foo(n - 2);

}

static void Main(string[] args)

{

Console.WriteLine(DateTime.Now.ToString());

Console.WriteLine(foo(40));

Console.WriteLine(DateTime.Now.ToString());

}

}

}

c++/clr与c#的性能比较;

}

  首先要说的是测试的方法比较简单,但已经能够说明问题。c++的性能确实高于c#,这个和语言无关,而使与优化有关。通过反向编译生成的类库,可以发现,c++在clr上的调用比c#经过更多的层次。另外c#的优势在于快速开发和编程的安全。假如将这些纳入其中,两者之间的比较才算是比较合理的。

  当然希望,今后官方能够将c#的编译优化进行提高。

  另外说一下,鉴于这次测试,我们在阳光网改版的时候,将URLRewrite采用c++写的托管类库,也算是一种尝试吧。