Everyone says c++ is faster than c#, why?
-
Comparing apples and pears ... **c** for (int i = 2; i **<** 2000000; i++) for (int j = 2; j*j **<=** i; j++) **c#** for (int i = 2; i **<=** 2000000; i++) for (int j = 2; j * j **<** i; j++) As it stands now, C does quite a few more loops than C# ... Change the loops (so that they are the same) and remove I/O from inside them. YMMV
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
-
Any benchmark test never ever should include I/O! You're not experienced here, so we forgive you. :)
-
Good catch!
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
You sound like a liberal. On and you're wrong. It's simply a technical discussion.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013 -
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
All the comments are like "but you didn't do it this way" or "you didn't do it that way". So that pretty much just says that you can easily write c# code to be fast, and in many cases faster than c++. However if you want to obsess over your code optimization and use uncommon coding practices you can make c++ be faster than c# in many cases.
Elephant elephant elephant, sunshine sunshine sunshine
-
So liberals are not permitted here. I'm not a liberal, but I'm sure that sooner or later I'll say something that is not extreme right wing enough to satisfy you.
-
Ygnaiih wrote:
So liberals are not permitted here.
Only a liberal would have made that leap. :-\
There are only 10 types of people in the world, those who understand binary and those who don't.
-
Told you up front I'm not a liberal. My point is if you want to do a political discussion, code project is not the place for it.
Ygnaiih wrote:
Told you up front I'm not a liberal
Ya, I was making a silly joke.
Ygnaiih wrote:
if you want to do a political discussion, code project is not the place for it.
Actually, it is, but not in the Lounge. The Soapbox is the place for it. However, John wasn't making any political statements. :doh:
There are only 10 types of people in the world, those who understand binary and those who don't.
-
After a quick check, what you're really comparing here is the efficiency of
Console.WriteLine
vscout
If you swapcout
forprintf
you get much more similar times. In my case the C++ was a second faster than the C# but it's not a very fair comparison. Really I don't think you'll find much difference in performance of either.An answer to the question? What's wrong with you!!! :-) It's funny how it was so horrible that this question was here, but the whole long conversation about liberals and stuff is just fine! Hmmm people just being people again. It's a shame the way we act sometimes.
hatfok King Yiddum's Castle Pegasus Galaxy
-
After a quick check, what you're really comparing here is the efficiency of
Console.WriteLine
vscout
If you swapcout
forprintf
you get much more similar times. In my case the C++ was a second faster than the C# but it's not a very fair comparison. Really I don't think you'll find much difference in performance of either.Yes, it's comparing Console.WriteLine with cout, but even then it's not a fair comparison. std::endl doesn't just write a newline character, it also flushes the output buffer. Try replacing endl with '\n'. Also try redirecting the console output to a file, running each program several times, discarding the outliers and taking an average of the remaining run times then come back with your results. I doubt that there will be much difference between the two programs because basic C++ streams are not as bad as some people here are trying to make out.
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
I copied and pasted your exact code and compiled them with the Visual Studio 2008 (v9.0) compilers (cl for C++, csc for C#) and got wildly different results--C++ reported a time of 2.868 seconds, versus 4 for C#. My exact command lines were: For C++:
cl /EHcs cpptest.cpp
cpptest.exe > cppoutput.txt
For C#:
csc cstest.cs
cstest.exe > csoutput.txt
As far as why people say C++ is faster than C#--there are a great many factors, including how the code was written, what the code is doing, how it was compiled, the system (hardware and OS) it's run on, compilers, etc. that can make a difference, and no doubt there may be examples of C# performing some things faster in some instances. In general, I think it has more to do with the overhead inherent in C#, but that's just me speculating. Maybe we can get a real answer from someone knows more than I do about the internals of the languages (and whether managed C++/CLI would have had results similar to the C# code above).
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
This is like challenging a boxing champion to an arm-wrestling competition and then find him wanting. :laugh: The speed of C++ is not tested by printing into stdout. Do some processing that doesn't involve printing repeatedly into console. For example, calculate the largest 10 digit prime by traversing a 5x5 number matrix. Then compare the speed.
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
You're timing cout.
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
"my tests shows c# is faster than c++" No they don't. You showed that ONE C# program ran faster than ONE C++ program. Sheesh.
-
After a quick check, what you're really comparing here is the efficiency of
Console.WriteLine
vscout
If you swapcout
forprintf
you get much more similar times. In my case the C++ was a second faster than the C# but it's not a very fair comparison. Really I don't think you'll find much difference in performance of either. -
Well... you know now how much of a lie it is! Arguably, theoretically, C++ should be faster because it has a better ahead of time compiler. But it's also relying on harder to optimize and write library and less elegant compiler constructs... which make it slower... However C# will slow down at 2 crucial point: - Start-up. C# start-up time is definitely, humanely perceptibly, slower (because of all the assemblies verification) - Allegedly real time code can only be reliably be written in C++ as it is, likely easier to write allocation free code, whereas realtime C# slow down on hidden object allocation (although its allocation algorithm are much faster than C++ ones) - Finally, for laugh, it's just an empty arguments that C++ developer have against C# developer. Surprisingly most of the random comparison code written by random developer make C# wins. But the occasional C++ zealots sometimes come back after a couple of day of profiling and disassembly with a marginally faster C++ version saying that the C++ version was... unoptimized! So... here you have it!
All in one Menu-Ribbon Bar DirectX for WinRT/C# since 2013! Taking over the world since 1371!
-
I'm not an expert in this but I can tell you this much: - You didn't set a processor affinity. Stack swaps could have skewed your results. - You didn't set the process and thread priority to high. Your programs code have been interrupted by other threads. - Did you make sure you ran both programs with compiler optimization and without debugger/profiler attached? - Integer-arithmetic isn't representative for the overall speed of the language. Take a look here: Head-to-head benchmark: C++ vs .NET[^]
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
-
I used same algorithm for c# and c++. I have read c++ is faster than c# but my tests shows c# is faster than c++. What's wrong? My codes like this. c++ is 36 seconds
#include
#includeusing namespace std;
int main(){
const clock_t beginTime = clock();
for (int i = 2; i < 2000000; i++)
{
bool isPrime = true;
for (int j = 2; j*j <= i; j++)
{
if (i%j == 0){
isPrime = false;
break;
}
}
if (isPrime)
cout << i << endl;
}
cout << float(clock() - beginTime) / CLOCKS_PER_SEC;
}c# is 9 seconds
using System;
namespace Console01
{
class Program
{static void Main(string\[\] args) { DateTime beginTime = DateTime.Now; for (int i = 2; i <= 2000000; i++) { bool isPrime = true; for (int j = 2; j \* j < i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) Console.WriteLine(i); } TimeSpan ts = DateTime.Now - beginTime; Console.WriteLine(ts.Seconds); } }
}
Hi, I compiled and ran the program at home using g++. The printing version was 5.6 seconds and a non printing version was 4.62 seconds. much better than both those times. C# also has the overhead on the .NET runtime. And the C++ program just has the c++ standary libray for overhead. c++ is fully compiled and c# is tokenized and still needs to be processed by the JIT.
-
I'm not an expert in this but I can tell you this much: - You didn't set a processor affinity. Stack swaps could have skewed your results. - You didn't set the process and thread priority to high. Your programs code have been interrupted by other threads. - Did you make sure you ran both programs with compiler optimization and without debugger/profiler attached? - Integer-arithmetic isn't representative for the overall speed of the language. Take a look here: Head-to-head benchmark: C++ vs .NET[^]
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson