![]() |
Delphi vs. C# vs C++
Hallo,
hab mal einen Vergleich zwischen Delphi 6 und MS C# Express 2015 gemacht:
Delphi-Quellcode:
C#:
procedure TForm1.Button1Click(Sender: TObject);
var li,lj:integer; begin li := 0; lj := 0; for li:=0 to 50000 do begin for lj:=0 to 1000000 do begin end; if (li mod 1000=0) then begin button1.caption := inttostr(li); button1.Update(); end; end; end;
Code:
Ergebnis: Delphi ist 10 mal schneller als C#
private void button1_Click(object sender, EventArgs e)
{ int li = 0; int lj = 0; for (li=0;li<50000;li++) { for(lj=0;lj<1000000;lj++) { } if (li % 1000 == 0) { button1.Text = li.ToString(); button1.Update(); } } } Kann jemand Angaben zu C++ machen ? |
AW: Delphi vs. C# vs C++
Du weisst schon dass Du hier nicht Delphi vs. C# getestet hast, sondern die VCL (also die Win32 API) gegen das Windows Forms UI-Framework?
Mach das nochmal mit VCL gegen Firemonkey und sag uns dann mal, wie viel langsamer 'Delphi' gegenüber 'Delphi' ist. Um die Geschwindigkeit der Runtime an sich zu testen, bieten sich Vergleiche an die viel CPU nutzen. Zum Beispiel identisch implementierte Sortieralgorithmen, die den identischen Input sortieren. Da dürfte der Unterschied dann eher marginal sein. |
AW: Delphi vs. C# vs C++
Was genau willst du denn messen? Wovon genau willst du die Geschwindigkeit vergleichen?
Ich erkenne in deinem Code nicht den Sinn des Benchmarks, ein Schluss "A ist x-mal schneller als B" ist daher nicht wirklich nachvollziehbar. |
AW: Delphi vs. C# vs C++
Zitat:
btw: Selbst mit einem
Delphi-Quellcode:
damit Firemonkey die Änderung darstellt, ist FMX ca. 3,5% schneller als die VCL...
button1.Text := inttostr(li);
Application.ProcessMessages; Aber darum ging es Ihm sicherlich nicht... |
AW: Delphi vs. C# vs C++
[OT]
Chic! Chips holen und sich zurück lehnen. Gruß K-H [/OT] |
AW: Delphi vs. C# vs C++
Zitat:
*dazusetz* |
AW: Delphi vs. C# vs C++
[OT]
Ich hab Nachos und Coke [/OT] O'Neill |
AW: Delphi vs. C# vs C++
[OT]
Ping Runde 1 [/OT] |
AW: Delphi vs. C# vs C++
Was gibt´s hier zu kapieren ?
Delphi-Quellcode:
if (li mod 1000=0) then begin
Delphi ist mit dem Code 10 mal schneller als C# ! Könnt Ihr das auch mal testen ? In 15 sec ist Delphi bei 40 000 während C# gerade mal bei 4000 ist. Ausgegeben wird ja nur alle 1000 Werte. Wenn ich jeden Wert ausgebe kommt Delphi bis 30 000 in 15 Sekunden. C# bis 3000 . Ihr könnt ja selber mal vergleichen ! (Sollte bei dem Mega-Code wohl kein Problem sein.) Wie schnell ist im Moment MS C++ bei dem Vergleich ? (hab ich leider nicht zur Verfügung.)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var li,lj:integer; begin li := 0; lj := 0; for li:=0 to 50000 do begin for lj:=0 to 1000000 do begin end; if (li mod 1000=0) then begin button1.caption := inttostr(li); button1.Update(); end; end; end; |
AW: Delphi vs. C# vs C++
Ich kann es nicht testen aber die Fragestellung ist doch in Ordnung.
Klar hat die GUI Auswirkungen aber die ist hier schon reduziert worden. Und wenn die Aufgabenstellung so gegeben ist, ist die Fragestellung zur Performance auf unterschiedlichen Systemen legitim. Also mein Vorschlag: Antworten oder halt nicht. |
AW: Delphi vs. C# vs C++
Auf irgendeinem Delphi Karton stand mal "Für die einfachen Sachen nimmt man VB, für die Schnellen und komplexen Delphi". Glaube es war D4 oder D5.
|
AW: Delphi vs. C# vs C++
Möchtest du testen wie schnell die for-Schleifen-Variablen hochgezählt werden, wie schnell so eine Integerumwandlung in String geht, wielange der mod-Befehl braucht oder wielange der Bildschirmupdate geht?
|
AW: Delphi vs. C# vs C++
Zitat:
Jedes Programm besteht doch aus unterschiedlichen Befehlen und daraus ergibt sich dann ein Mittelwert ! Fakt ist, dass Delphi 6 bei dem simplen Programm 10 mal schneller ist, als MS C# Express 2015. ![]() Meine Frage ist, wie schnell läuft dieser einfache Code auf MS C++ im Vergleich zu Delphi (VCL) ? Vielleicht ist hier ja jemand, der beides zur Hand hat. |
AW: Delphi vs. C# vs C++
Zitat:
|
AW: Delphi vs. C# vs C++
Nur die Ruhe. Die meisten werden hier des Lebens fähig sein.
Allerdings scheinst Du die Aussagekraft Deines Code-Fetzens zu überstrapazieren. Ich habe aktuell keine Zeit, einen entsprechenden Vergleich nachzustellen - glaube Dir aber gern, dass es sich auf Deinem System verhält wie beschrieben. Die Geschwindigkeit von Programmen "im Mittel" zu vergleichen ist etwa so, als wolltest Du die Wassertemperatur der Ozeane "im Mittel" vergleichen. Du wirst punktuell zu Ergebnissen kommen, die lokal betrachtet in Ordnung sein mögen, dennoch wäre es wagemutig, darauf basierend eine Gesamtausgabe treffen zu wollen. Du solltest die Bereiche isoliert testen: CPU-Arithmetik, Speicherverwaltung, UI, I/O zu Datenträgern. Aber all das gibt es schon zuhauf für diverse Programmiersprachen. |
AW: Delphi vs. C# vs C++
Zitat:
|
AW: Delphi vs. C# vs C++
Wenn es ein isolierter Test sein soll, dann nimm das UI-Updaten da raus und benutze ne StopWatch um wirklich nur die Zeit der Schleife zu messen.
|
AW: Delphi vs. C# vs C++
Zitat:
Die Frage ist: Wie schnell läuft dieses einfache Programm auf MS C++ im Vergleich zu C# und Delphi ! |
AW: Delphi vs. C# vs C++
Zitat:
|
AW: Delphi vs. C# vs C++
Zitat:
if (li mod 1000=0) then begin ausgegeben wird ! Die Frage ist: wie schnell läuft das Teil auf C++ ? kann das mal jemand testen ? |
AW: Delphi vs. C# vs C++
Zitat:
|
AW: Delphi vs. C# vs C++
Zitat:
Kannst Du evtl. mal den Code bei C++ messen, um zu vergleichen ? Hab leider kein C++ zur Hand. |
AW: Delphi vs. C# vs C++
Zitat:
Code:
int main() {
int i, j; for (i = 0; i < 50000; i++) for (j = 0; j < 1000000; j++) ; // kein UI-Update. Lenkt nur ab. return 0; } Ergebnis: Das Programm läuft im einstelligen Millisekundenbereich (1-2ms), wobei anzumerken ist, dass in dem Bereich Messungen im Verhältnis ungenau sind; Programm läuft aber in wenigen Millisekunden. Ich habe auch mit den Werten rumgespielt, statt 50000 auch 50 oder 1000000, das Ergebnis blieb dabei aber nahezu konstant (+/-1ms, nehme an das sind Messungenauigkeiten). Fazit daraus: Sinnvolle Performance-Messung ist schwieriger, als es aussieht. |
AW: Delphi vs. C# vs C++
Debug oder Release Config?
Einfacher oder mehrfacher Durchlauf (Stichwort JiT)? |
AW: Delphi vs. C# vs C++
Wenn der gcc schlau optimiert, macht er sowieso das draus:
Code:
int main() {
return 0; } |
AW: Delphi vs. C# vs C++
Natürlich macht die Ausgabe am UI extrem viel aus.
Eine Ausgabe am UI ist grob so langsam wie einige tausende Schleifendurchläufe in denen nichts sonst gemacht wird. Das heisst wenn Du alle 1000 Durchläufe stoppst, um irgendwas zu machen was grob geschätzt um die 8 - 12 mal so viel Zeit braucht wie die 1000 durchzuzählen, misst Du ausschliesslich die Darstellung am UI. Beschäftige Dich erstmal mit den theoretischen Grundlagen von korrekten Performance-Tests bevor Du versuchst einen komplett unsinnigen Test mit anderen Sprachen / Plattformen durchführen zu lassen. Und das ist auch der Grund, warum Dir hier niemand dieses unsinnige Beispiel mit C++ testen mag. Die Leute hier haben keine Lust sich mit sowas offensichtlich sinnlosem zu beschäftigen. |
AW: Delphi vs. C# vs C++
Zitat:
Der selbe Code als Konsolenanwendung in Delphi benötigt rund 17 Sekunden. |
AW: Delphi vs. C# vs C++
Ich finde diese Art von Messungen sinnfrei und wenn man schon C++,C# und Delphi vergleicht sollte man sich mit dem Debugger auch mal den erzeugten Assembler-Code ansehen. Vielleicht optimiert ein guter/aggressiver Compiler die einfachen (sinnlosen) Schleifen auch einfach weg und macht nix wie eben "return 0". Da kann doch nichts vergleichen !
Wenn man die CPU-Arithmetik und die Qualität des erzeugten Codes testen will muss man schon etwas Anspruchvolleres proggen. Dann könnte man auch testen, ob der Compiler die Befehlssätze (Stichwort SSE-SSE4.2) der CPU sinnvoll nutzt. |
AW: Delphi vs. C# vs C++
Zitat:
|
AW: Delphi vs. C# vs C++
Zitat:
Und wie heißt es so schön: "Wer Mist mist, mist Mist" |
AW: Delphi vs. C# vs C++
Diese Vermutung hatte ich. Wenn man aus 50000 5000 oder sogar 50 macht und sich an der Zeit nichts ändert, spricht es auch dafür.
C# (2015) benötigt sogar etwas weniger als Delphi (16,6 Sekunden) VC++ (2015): 0 ms. Nach Abschalten der Optimierung sind es dann 103s c#:
Code:
Delphi:
using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int li = 0; int lj = 0; int st = System.Environment.TickCount; for (li = 0; li < 50000; li++) { for (lj = 0; lj < 1000000; lj++) { } } int et = System.Environment.TickCount - st; Console.WriteLine(et); Console.ReadLine(); } } }
Delphi-Quellcode:
c++:
program Test;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Windows; var li,lj:integer; st: Cardinal; begin try li := 0; lj := 0; st := GetTickCount; for li:=0 to 50000 do begin for lj:=0 to 1000000 do begin end; {if (li mod 1000=0) then begin WriteLn( li); end; } end; Writeln( IntToStr(GetTickCount - st)); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Code:
#include "stdafx.h"
#include <iostream> #include <windows.h> using namespace std; #pragma optimize( "", off ) int main() { int i, j, k; DWORD st = GetTickCount(); for (i = 0; i < 50000; i++) for (j = 0; j < 1000000; j++) { } DWORD et = GetTickCount(); cout << (et - st); cin >> i; return 0; } |
AW: Delphi vs. C# vs C++
Zitat:
Delphi-Quellcode:
if (li mod 1000=0) then begin
button1.caption := inttostr(li); button1.Update(); end; |
AW: Delphi vs. C# vs C++
Vor einiger Zeit (mehrer Jahre) gabs mal 2-3 Artikel bezüglich Performancevergleich C/C++/Java/C# und Delphi.
Ergebnis war: Im "Number-Crunshing" ist C/C++ vorne In "normalen" Entwickeralttag (Objektorientierte Programmierung, Ableitung, Überladen von Methoden, ...) sind Delphi/Java/C# ähnlich schnell. C++ war hier der "einsame" Verlierer. |
AW: Delphi vs. C# vs C++
Es sollte schon allen klar sein, dass hier "nur" alle 1000 Durchläufe der Button aktualisiert wird. Aber bei 50 Mio. Durchläufen ist auch das schon einiges. "Einiges" im Sinne von "derart viel, dass es so sehr ins Gewicht fällt, dass alles andere quasi weggedrückt wird".
|
AW: Delphi vs. C# vs C++
Zitat:
Wenn aber so ein Mod-Vergleich alle 1 ms kommt ist trotzdem die GUI-Aktualiserung das bremsende Element. Haben mittlerweile ein Basisklass/Codefragement/Methode das eine "if DelayToLastUpdate > 300ms"-Abfrage drin hat. Damit wird die GUI nur alle 300 ms aktualisiert (Und erst nach Aktualisierung wird die Vergleichszeit neu gestartet) Damit habe ich Zeiten für länger andauernde Aktionen teilweise auf 1/5 der ursprünglichen Zeit verkürzen können. |
AW: Delphi vs. C# vs C++
Zitat:
Kann es sein, dass die Express-Edition von Microsoft nicht die volle Leistung bringt ? ![]() ich hab jetzt auch mal die Konsolen-Beispiele von mkinzler auf Delphi und C# Express 2015 mit der Hauptschleife bis 5000 laufen lassen. Delphi war in 1,684 Sekunden fertig, C# Express 2015 nach 19,797 sec. Wird die Express Edition demnach von Microsoft ausgebremst ? |
AW: Delphi vs. C# vs C++
Zitat:
Aber andererseits haben die Kollegen natürlich Recht, dass das Testbeispiel nicht wirklich taugt. Wenn es auf Performance ankommt, sollte man kein GUI-Refresh dazwischen schieben. Wenn man dies macht, kann einem die Performance nicht so wichtig sein. Also Deine Anforderungen sind da nicht wirklich klar. Was willst Du denn eigentlich erreichen? |
AW: Delphi vs. C# vs C++
Zitat:
Zitat:
![]() |
AW: Delphi vs. C# vs C++
Zitat:
![]() ![]() |
AW: Delphi vs. C# vs C++
Zitat:
Gute Frage. Solche Aufgaben/Anforderungen kommt mir verdächtig nach "Wir haben schon immer mit Delph/C/Java/..." gemacht und jetzt sollen wir was anders machen. Schnell mal schauen ob wir Killerargumente finden". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz