【发布时间】:2015-10-27 15:31:53
【问题描述】:
我不是在开玩笑。 我有一个 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 的想法,加上 std::ios_base::sync_with_stdio(false); 想法,没有任何运气或结果变化。
编辑 2:我尝试了 C 的 printf(),它的速度要快得多。比 C# 快 3 倍。
人们告诉我 IO 流很慢,所以我在没有写入控制台的情况下尝试了它们,C++ 仍然比 C# 快得多。
总之,Writeline() 比 cout 快得多,而 printf() 比两者都快得多。所以写到控制台是唯一减慢它的东西。
TLDR:printf() 获胜,控制台写入会减慢速度。
【问题讨论】:
-
您的程序受 I/O 限制,因此您实际上是在比较两个运行时的 I/O 堆栈,而不是语言。
-
另外,您是否在发布模式下编译了您的 C++? iostreams 有大量的间接性,随着优化的开启,这些间接性会大大减少。
-
您如何对它们进行基准测试?我相信 C# 的
WriteLine不会在每一行之后刷新如果从控制台重定向,而在 C++ 中endl明确地请求刷新,不管...... -
大声笑,这不是“应用程序”,它只是一些 API 上的小客户端,看起来它做同样的事情,但很大程度上取决于内部配置标志。完全相同的问题已经在这里发布了。
-
抱歉,我混淆了一个与 Python 相关的问题。但老实说,足够相似,足以建立大脑连接。 stackoverflow.com/questions/9371238/…
标签: c# c++ performance