c# - 为什么 C# 运行速度比 C++ 快?

标签 c# c++ performance

我不是在开玩笑。 我有一个 C# 应用程序和一个 C++ 应用程序。他们用完全相同的代码量做完全相同的事情...

...C# 的运行速度更快,不仅更快,而且快了 10 倍。

这让我觉得很奇怪,因为首先,我在调试器中运行 C# 应用程序,这应该会降低 C# 的运行速度。然后,由于 C# 是字节码,使用 .NET 编译成具有大量额外功能的 MSIL,开销巨大,这应该会减慢它的速度。而 C++ 只是机器代码。

这是 C# 代码:

static void main()
{
    ulong i = 0;
    while (i < 100000000000)
    {
        Console.WriteLine(i);
        i++;
    }
}

虽然这是C++代码

int main()
{
    usigned long i = 0;
    while (i < 100000000000)
    {
        cout << i << endl;
        i++;
    }
    return 0;
}

他们只是在数数并显示一个数字。 C++ 的是 1000,而 C# 的是 7000。(快 7 倍)

我什至尝试编译它们,并在没有调试器的情况下使用命令提示符和命令运行它们:cplusplus.exe && csharp.exe

是的,我知道这个问题可能是“题外话”:P 或者可能是“不清楚要问什么”。 :/ 但是,请有人向我解释一下。

如果这很重要,我正在使用这个 CPU:Intel i7 2.5 Ghz。

编辑: 我做了cout << i << "\n"; 想法,加上std::ios_base::sync_with_stdio(false); 想法,没有任何运气或结果改变。

编辑 2:我尝试了 C 的 printf(),它的速度要快得多。比 C# 快 3 倍。

人们告诉我 IO 流非常慢,所以我在不写入控制台的情况下尝试了这两种方法,C++ 仍然比 C# 快得多。

总之,Writeline() 比 cout 快得多,而 printf() 比两者都快得多。因此,写入控制台是唯一会减慢速度的事情。

TLDR:printf() 获胜,控制台写入会减慢速度。

最佳答案

您的代码效率低下,因为:

  • 默认情况下,C++ 流对象与 C 的 stdio 同步,这使得它变慢了。
  • 您正在使用 endl,这进一步使其变慢了。

解决这两个问题,你有这个代码:

int main()
{
    std::ios_base::sync_with_stdio(false);

    usigned long i = 0;
    while (i < 100000000000)
    {
        cout << i << '\n'; //use \n, not endl
        i++;
    }
    return 0;
}

将其编译为(无论您使用什么编译器都必须使用优化标志):

$ g++ main.cpp -O3 -o run.test
$ time ./run.test

关于 sync_with_stdio(false)endl 的解释,请阅读我的回答:

希望对您有所帮助。

关于c# - 为什么 C# 运行速度比 C++ 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31822648/

相关文章:

c# - 使用 EnvDTE 创建表单后不会保存

c# - LINQ 自定义排序

c# - Shell 脚本与高级解释语言(C#/Java/等)的性能比较

c# - 在这种情况下使用 RSA 加密是否足够安全/可能?

c# - 论坛标签。实现它们的最佳方法是什么?

c++ - OpenCv 断言失败

c++ - 未在此范围内声明

c++ - 使用默认构造函数返回临时对象时,析构函数调用两次

python - 快速计算整个数据集到每个聚类中心的距离

javascript - 从二进制缓冲区 Javascript 的一部分创建类型化数组