我不是在开玩笑。 我有一个 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/