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());
}
}
}

 

ContractedBlock.gif ExpandedBlockStart.gif 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/archive/2009/03/29/1424564.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值