Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwindigkeit von C#
Hi Leute!
Frage:
Weiß jemand wie schnell C# ist, im Vergleich zu Sprachen wie
C++ bzw. Visual C++ ?
(oder Delphi, Java ..etc..etc..)
Gibt es irgendwo aussagekräftige Zahlen?
thanX
Felix Kaiser
13.06.2002, 16:13
Genaue Zahlen kenne ich nicht, aber soweit ich weiß ist C# auch wie Java interpretierter Code und somit IMMER doch spürbar langsamer als CPU Code, wie von C/C++, Delphi, VB oder was auch immer ausgehend.
wuerde mich auch interessieren, ich werd das mal testen, kann aber ein paar tage dauern
xero.NET
14.06.2002, 14:44
ich hab da einen benchmark... ergebnisse darf ich jedoch jetzt hier nicht veröffentlichen, da m$ das nicht will ... aber selber darf jeden den benchmark durchführen...
hier ein auszug aus der c't: "... Microsoft verbietet selbst für die Final Version des SDK, Benchmarks ohne Genehmigung zu veröffentlichen - eine eigenwillige Auffassung von Offenheit. Mit unseren Quelltexten, die sie inklusive aller anderen Beispiele aus diesem Artikel unter den Soft-Links für diese Ausgabe finden, kann immerhin jeder selbst Geschwindigkeitsvergleiche durchführen. Der grundsätzliche Eindruck ist, dass C# und Java sich nicht viel nehmen, also deutlich langsamer laufen als in Maschinensprache kompiliertes C++. Ein überraschendes Tempo legt aber Managed C++ vor, also in MSIL-Zwischencode übersetztes C++. ..."
hier der download zum benchmark:
ftp://ftp.heise.de/pub/ct/listings/0204-098.zip
bzw. auf http://www.heise.de/ct/ gehen und als softlink "0204098" eingeben
@xero.NET
also ich bin dafuer auch die ergebnisse zu veroeffentlichen, bin gerade dabei deinen link zu testen, wenn du die ergebnisse hast, poste sie einfach weil der M$ scheiss strategie geht mir ehrlich gesagt mehr als nur am arsch vorbei!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C# (released)
~~~~~~~~~~~
Square Root: 194500 ms for 18 iterations; 10806 ms per iteration
Vector: 8993 ms for 100000000 iterations; 90 ns per iteration
List: 5398 ms for 25000000 iterations; 216 ns per iteration
Blur: 2073 ms for 4940180 iterations; 420 ns per iteration
Runge-Kutta: 2223 ms for 500000 iterations; 4446 ns per iteration
Memory: 1021 ms for 20000 iterations; 51073 ns per iteration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C++ Builder 6 (released)
~~~~~~~~~~~
Square Root: 148934 ms for 18 iterations; 8274 ms per iteration
Vector: 1152 ms for 100000000 iterations; 12 ns per iteration
List: 1091 ms for 25000000 iterations; 44 ns per iteration
Blur: 942 ms for 4940180 iterations; 191 ns per iteration
Runge-Kutta: 1301 ms for 500000 iterations; 2602 ns per iteration
Memory: 391 ms for 20000 iterations; 19550 ns per iteration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VC++ 6 (released) )
~~~~~~~~~~~
Square Root: 162183 ms for 18 iterations; 9010 ms per iteration
Vector: 1523 ms for 100000000 iterations; 15 ns per iteration
List: 4266 ms for 25000000 iterations; 171 ns per iteration
Blur: 991 ms for 4940180 iterations; 201 ns per iteration
Runge-Kutta: 2103 ms for 500000 iterations; 4206 ns per iteration
Memory: 431 ms for 20000 iterations; 21050 ns per iteration
KANN JEMAND DEN TEST UEBERPRUEFEN VORALLEM BUILDER / VC++ 6 WEIL DAS KOMMT MIR DOCH KOMISCH VOR
~~~~~~~~~~~~~~~~
fuer alle M$ mitarbeiter, dies ist kein geschwindigkeitsvergleich, sondern lediglich ein printscreen, eines progs also *piep* *piep* *piep* (zensuriert) :D :D :D
@xOON + xero.NET
thanX für eure Hilfe!
Ich war jetzt eine Zeit lang ohne I-Net, deshalb konnte ich leider nicht antworten!
Ich hab die angesprochenen Benchmarks mal auf meinem System getestet:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Benchmarks Athlon-XP 1600+ 256 MB DDR-Ram
Visual Studio C++ 6.0
--------
Square Root: 29000 ms for 18 iterations; 1611 ms per iteration
Vector: 218 ms for 100000000 iterations; 2 ns per iteration
List: 204 ms for 25000000 iterations; 8 ns per iteration
Blur: 265 ms for 4940180 iterations; 54 ns per iteration
Runge-Kutta: 469 ms for 500000 iterations; 938 ns per iteration
Memory: 203 ms for 20000 iterations; 10150 ns per iteration
--------
C# Visual Studio.NET
--------
Square Root: 41359 ms for 18 iterations; 2298 ms per iteration
Vector: 2938 ms for 100000000 iterations; 29 ns per iteration
List: 1906 ms for 25000000 iterations; 76 ns per iteration
Blur: 906 ms for 4940180 iterations; 183 ns per iteration
Runge-Kutta: 844 ms for 500000 iterations; 1688 ns per iteration
Memory: 422 ms for 20000 iterations; 21094 ns per iteration
--------
managed C++ Visual Studio.NET
--------
Square Root: 42390 ms for 18 iterations; 2355 ms per iteration
Vector: 734 ms for 100000000 iterations; 7 ns per iteration
List: 235 ms for 25000000 iterations; 9 ns per iteration
Blur: 266 ms for 4940180 iterations; 54 ns per iteration
Runge-Kutta: 203 ms for 500000 iterations; 406 ns per iteration
Memory: 250 ms for 20000 iterations; 12500 ns per iteration
--------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Die JAVA Benchmark konnte ich leider nicht zum Laufen bringen.
Ich bekomme jedesmal folgende Fehlermeldung:
(nach erfolgreicher Kompilierung)
D:\Help\>java de.heise.ct.bench.Benchmark
Exception in thread "main" java.lang.NoClassDefFoundError:de/heise/ct/bench/Benchmark
Ich kenn mich mit JAVA leider überhaupt nicht aus, vielleicht weiß ja jemand wie ich das Ding zum laufen bringe ...thanX.
Borland Builder hab ich leider nicht, deshalb konnte ich es auch nicht testen.
Interessant ist wohl wirklich das Ergebniss mit managed C++.NET !!
Das ist bei Runge-Kutta sogar schneller(!) als VC++ 6.0 !!
Die restlichen sind bloß etwas langsamer ...
@M$ --> try2catch thos :-)
greetinX
Hallo, antworte erst jetzt, weil ich euch heute per google gefunden habe.
Habe den selben Test gemacht und komme auf ähnliche werte. Java ist in fast allen Disziplinen ca. 1,3 bis 1,5 mal langsamer als C#.
Geschwindigkeitsunterschied von Visual-C++ und Borland-C++ ist tatsächlich so, wie vorposter schrieb! Habe einen sehr primitiven Test selber konstruiert in http://whichlang.junoland.de. Dort wird aber nur gezählt: 7,14,21,28... und nichts höheres gemacht. Ergebnis: zum zählen ist C# genau so schnell wie borland-c++ und java ist 2,5 mal langsamer; visual-c++ ist etwas langsamer als Borland-c++.
Ich hoffe, dass das hier noch jemand liest - vielleicht ebenfalls über google findend...
Juno
peschmae
23.06.2003, 16:15
Original geschrieben von Felix Kaiser
Genaue Zahlen kenne ich nicht, aber soweit ich weiß ist C# auch wie Java interpretierter Code
afaik ist C# nicht echt intepretiert sondern hat einen JIT, der (im Gegensatz zu Javas Hotspot) _alles_ (und nicht nur etwa 50 mal durchlaufener code) compiliert
MfG Peschmä
^^ ja, wird alles von der MSIL mit dem JIT kompiliert und dann gecached.. sobald du eine anwendung ein 2. mal startest, geht das dann auch viel schneller..
m$ will den MSIL-interpreter wom prozerssor hardwaremaessig interpretieren lassen.
wenn ihnen intel und amd mitzieht dann wird es nochmal um einiges schneller
2 fragen:
1. also ist c#-code sowas wie borland's p-code, der bei einem delphi-programm entsteht, richtig? zwar compiliert, aber irgendwie nicht so ganz.
2. so richtig ein hardware c#-interpreter? *kotz* das wäre der tag, an dem ich mir nen mac hole ... nee, lieber ne alpha ;)
peschmae
26.06.2003, 12:25
alpha ist leider tot und HP setzt zusammen mit Intel auf itanium (von dem auch die n-te Version noch nicht wirklich überzeugt...)
:(
MfG Peschmä
peschmae
26.06.2003, 12:28
Original geschrieben von cYrus
^^ ja, wird alles von der MSIL mit dem JIT kompiliert und dann gecached.. sobald du eine anwendung ein 2. mal startest, geht das dann auch viel schneller..
gibt es sowas eigentlich auch für Java/ist das geplant?
Ein JIT-Cache wäre wohl eine recht gute Lösung für ein bisschen mehr Tempo
MfG Peschmä
von java ist mir nichts bekannt.. ich befasse mich auch nicht damit! aber soviel ich weiss wird java-code immer intepretiert und gar nie wirklich übersetzt.. aber theoretisch wäre das schon lösbar.. nur obs momentan auch schon ne lösung gibt, kA
Pulpapex
26.06.2003, 18:39
Soweit mir bekannt ist, ist JIT Compiling erst mit Java aufgekommen. Nur die allererste Version von Java wurde nur interpretiert. Also hat sich Microsoft das Prinzip bei Java abgeschaut.
.. Oder gab es JIT Compiling schon mit Pascal und P-Code? Oder wofür war/ist P-Code gut?
Gruß
Pulpapex
Pulpapex
17.07.2003, 04:43
Dass .Net, wie in den geposteten Benchmarks zu sehen ist, mitunter deutlich langsamer als natives C/C++ ist, dürfte zum Grossteil auch an der Runtime liegen. Die einfache und sichere Programmierung erkauft man sich halt durch einen im Hintergrund laufenden GC und jede Menge Runtime-Checks.
Wenn man das bedenkt, sind die Geschwindigkeitsunterschiede schon wieder fast akzeptabel. Bei normalen Anwendungen bemerkt man den Unterschied sowieso kaum.
Sicherlich auch noch interessant und passend ist dieser c't-Artikel über die 7.Generation von C++-Kompilern (von Intel und MS):
http://www.hocomputer.de/ct0503.pdf
.NET ist sicher nicht das schnellste aber das bedeuten nicht dass deshalb dein prog langsam laeuft, 98% der zeit warten der rechner sowieso auf den benutzer!
wirklich zeitkrietische routinen schreibe ich sowieso nicht in C# sondern in einer C++ dll die ich von C# aus nutze, zB Kommunikation uerber serielle schnittstelle usw
...also Hardwareprogrammierung mache ich lieber in Assembler !(serielle Schnittstelle)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.