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());
}
}
}
Code
using namespace System;

Int32 foo(Int32 n)
{
    
if (n == 1 || n ==2)
    {
        
return 1;
    }

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

int main(array<System::String ^> ^args)
{
    Console::WriteLine(DateTime::Now.ToString());
    Console::WriteLine(foo(
40));
    Console::WriteLine(DateTime::Now.ToString());
    
return 0;
}

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

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

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

  

原文地址:https://www.cnblogs.com/kathmi/p/1424564.html