zoukankan      html  css  js  c++  java
  • 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++写的托管类库,也算是一种尝试吧。

      

  • 相关阅读:
    平板涂色
    速算游戏_NOI导刊2011提高(04)
    信息学奥赛一本通——配套刷题网站
    求10000以内n的阶乘
    大整数的因子
    计算2的N次方
    大整数加法
    带余除法
    A/B 高精度
    A*B 高静度
  • 原文地址:https://www.cnblogs.com/kathmi/p/1424564.html
Copyright © 2011-2022 走看看