我不是在开玩笑。 我有一个C#应用程序和一个C ++应用程序。他们做同样的事情,在完全相同的代码量...
I am not joking. I have a C# application, and a C++ application. They do they exact same thing, in the exact same amount of code...
...和C#一个运行更快,不只是更快,但像10
...And the C# one is running faster, not just faster, but like 10 times faster.
这让我很奇怪,因为一个,我在调试器中运行C#应用程序,这应该减慢C#开始。然后,由于C#是字节码与巨大的开销使用.NET编译成MSIL和一大堆额外的功能,这应该会放慢速度。
This struck me as weird, because for one, I was running the C# app in the debugger, which should slow C# down to begin with. Then, for the reason of that C# is bytecode with huge overhead using .NET compiled into MSIL with a bunch of extra features, that should slow it down. While C++ is just pure machine code.
这里是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倍)
They are just counting and displaying a number. The C++ one would be at 1000, while the C# one would be at 7000. ( 7x faster)
我甚至尝试编译他们,并运行他们没有调试器使用命令提示符与命令: cplusplus.exe&& csharp.exe
I even tried compiling both of them, and running them without the debugger using command prompt with the command: cplusplus.exe && csharp.exe
是的,我知道也许这个问题是offtopic:P或者说不清楚是什么问题。 :/ 但是请有人向我解释这个问题。
Yeah, I know maybe this question is "offtopic" :P or maybe it is "not clear what's being asked for". :/ But please, someone explain this to me.
如果这很重要,我使用这个CPU:Intel i7 2.5 Ghz。
If this matters, I am using this CPU: Intel i7 2.5 Ghz.
编辑:我做了 cout < i<< \ n; 创意,以及 std :: ios_base :: sync_with_stdio(false); 在结果中。
I did the cout << i << "\n"; idea, plus the std::ios_base::sync_with_stdio(false); idea, without any luck or change in results.
编辑2:我试过C的printf(),它是多得多,更快。比C#快3倍。
EDIT 2: I tried C's printf() and it was much, much faster. 3x faster than C#.
人们告诉我,IO流非常慢,所以我没有写入控制台尝试他们,C ++仍然明显快于C# 。
People told me that IO stream was very slow, so I then tried them both without writing to the console, and C++ was still significantly faster than C#.
总之,Writeline()比cout快得多,printf()比两者快得多。因此,写入控制台是唯一减慢速度的方法。
In conclusion, Writeline() is much faster than cout, and printf() is much faster than both. So writing to the console is the only thing that slows it down.
TLDR:printf()胜利,控制台写入速度变慢。
TLDR: printf() wins, and console writing slows stuff down.
推荐答案我认为你的评价不够仔细。我用C ++重新创建了你的测试,如下所示:
I think you've not been careful enough in your evaluation. I recreated your test with C++ proving massively faster as detailed below:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSScratch { class Program { static void Main(string[] args) { ulong i = 0; while (i < 1000000) { Console.WriteLine(i); i++; } } } }在VS2013发布模式下构建到CSScratch.exe,然后我计时(在cygwin bash)输出重定向,所以文件系统写入时间不计数。结果相当一致,五次运行的最快 为:
I built the above in VS2013 Release mode to CSScratch.exe, which I then timed (under cygwin bash) with output redirected so file-system writing time wasn't counted. Results were fairly consistent, the fastest of five runs being:
time ./CSScratch.exe > NUL real 0m17.175s user 0m0.031s sys 0m0.124sC ++等价物:
#include <iostream> int main() { std::ios_base::sync_with_stdio(false); unsigned long i = 0; while (i < 1000000) { std::cout << i << '\n'; i++; } }也用VS2013编译:
Also compiled with VS2013:
cl /EHsc /O2 output.cc time ./output > NUL最慢的
The slowest of five runs:
real 0m1.116s user 0m0.000s sys 0m0.109s它比最快的C#运行(17.175秒)更快(1.116秒)。
which is still faster (1.116 seconds) than the fastest of C# runs (17.175 seconds).
这两个版本的一些时间是通过加载/动态链接,初始化等。我将C ++版本修改为循环10倍以上 它仍然只需要9.327秒 - 大约是C#需要十分之一工作量的时间的一半。
Some of the time for both versions is taken by loading / dynamic linking, initialisation etc.. I modified the C++ version to loop 10x more, and it still only took 9.327 seconds - about half the time C# needed for a tenth of the workload.
(您可以通过设置更大的输出缓冲区来进一步调整C ++版本,但通常不需要)。
(You could further tune the C++ version by setting a larger output buffer, but that's not normally needed).
更多推荐
为什么C#运行速度比C ++快?
发布评论