Seit wann ist VB schneller als C++?
-
Hallo!
Ich habe zuerst in VB .NET ein Programm unter Verwendung von DirectDraw 9 geschrieben.
Nun habe ich das ganze noch einmal in C++ geschrieben. Ich habe die gleiche Auflösung, die gleiche Farbtiefe, die gleiche Grafikkarte und auch sonstige Flags in beiden Versionen gleich eingestellt.
Auch das Bild, das ich zeichne ist in beiden Varianten gleich. Trotzdem schafft die VB-Variante ca. 500 FPS, die C++ - Version nur 200.Sollte denn nicht C++ schneller sein? Oder zumindest gleich schnell?
Hat jemand eine Idee woran der große Geschwindigkeitsunterschied liegen könnte? Oder kennt jemand ein DirectDraw 9-Beispiel für C++.
PS: Bei Direct3D ist eindeutig C++ schneller.
mfg
-
Vielleicht hast du keinen Microsoft Compiler verwendet!(?)
-
vielleicht ist dein c++ nicht optimal
möglicherweise übergibst du viele sachen byValue und nicht byReferenz obwohl value nicht nötig wäre?so haben die schon in der c't den vergleich von c++,delphi,java,c# versaut und c++ war am langsammsten.
rapso->greets();
-
Willst du damit sagen das man in VB oder Java ohne denken zu müssen programmieren kann und genauso schnell ist wie in C++, bei dem man sich den Kopf zerbrechen muss welche Varibale man wo verwendet.
-
JAVAMAN schrieb:
Willst du damit sagen das man in VB oder Java ohne denken zu müssen programmieren kann und genauso schnell ist wie in C++, bei dem man sich den Kopf zerbrechen muss welche Varibale man wo verwendet.
wenn man in einen ferrari hat und einen lkw zwei fahranfänger reinsetzt, klatscht der ferrarifahrer vielleicht gegen den nächsten baum, wohningegen der lkwfahrer ans ziel kommt.
interpretierst du jetzt wieder dass der lkw somit schneller sein muss als ein ferrari bei dem man so oft schalten muss und immer dem ausbrechen des hecks gegenhalten muss?
rapso->greets();
-
Ich kauf mir'n LKW zum angeben aber einkaufen fahr ich immer mit'm Ferrari, ergo kann man in jeder Sprache Mist zusammenprogrammieren.
Bye, TGGC
-
klar kann man das, aber manche sprachen nehmen einem ein wenig arbeit denkarbeit ab, dafür sind deren "generellele" ansätze oft ein wenig langsammer als die optimale ausnutzung einer hardware näheren sprache"
schau dir einfach den code aus der c't an, der schreiber des artikels meint, dass c++ wohl langsammer ist, weil die constructor und destructor aufrufe unperformanter sind als die von java, c# und delphi, dabei reicht es in seinem code das "const String ..." in "const String& ..." mit "replace in files" zu ändern und schon läuft das ganze bei mir in 9 anstatt 15 sekunden (und der hat noch viel mehr solcher konstruckte).
das zeigt einfach nur (wie du schon sagtest), dass man die richtige sprache für sein vorhaben nehmen sollte, sondern dass man mit der sprache auch umgehen können muss und ansonsten garkeinen gewinn von der sprache bekommt.
ich hab schon viele leute gesehen, die ihren code von c++ auf assembler umgestellt haben und nicht wissen dass es für die cpu einen unterschied zwischen "sub eax,1 ... jnz m1" und "loop m1" gibt und am ende wurde es nur langsammer. genau wie der poster hier von vb auf c++ umstellt und sich über die performance wundert.rapso->Greets();
ps. das ist kein flame
-
VB übergibt standardmäßig byRef. Das könnte also tatsächlich schon der erste Grund sein.
-
Hallo!
Ja, ich weiß dass VB standardmäßig byref übergibt. Das hat hier aber sicher nichts mit dem Problem zu tun, in meinem kleinen Testprogramm übergebe ich nämlich gar nichts. Ich rufe in einer GameLoop einfach immer nur die gleiche parameterlose Funktion auf, die die Offscreen-Surface auf den BackBuffer kopiert, und diesen dann auf die Primary Surface flippt. Genauso mache ich es auch in VB.
Der Initialisierungscode spielt keine Rolle. Solange die Flags gleich eingestellt sind dürfe es keinen Unterschied geben, denn der Init-Code wird eh nur ein Mal ausgeführt. Und der Code in der GameLoop ist so kurz, dass ich mir nicht vorstellen kann dass ich dort so viel Rechenzeit verschwende.mfg
-
wenn das wenig ist, könntest du dann beide sources hier posten? vielleicht könnten wir ja den kleinen pikanten unterschied finden oder uns überzeugen dass VB schneller ist
rapso->greets();
-
Also Jungs, 500FPS der eine 200FPS der andere. Auch wenn er den C/C++ Code optimieren sollte glaube ich nicht das danach C/C++ 1500FPS schaft. Was er ja müsste. Weil er soll ja sehr viel schneller sein als VB und nicht gleich oder etwas schneller.
PS WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN
-
Christoph Redl, hast du vielleicht das C++ Ding als Debug-Version compiliert und ausgeführt?
-
Davon gehe ich sowieso schon aus
-.-Debug-Build und Debug-Run (oder Einzelschritt
).
-
hahaha
-
HANZO schrieb:
Also Jungs, 500FPS der eine 200FPS der andere. Auch wenn er den C/C++ Code optimieren sollte glaube ich nicht das danach C/C++ 1500FPS schaft. Was er ja müsste. Weil er soll ja sehr viel schneller sein als VB und nicht gleich oder etwas schneller.
PS WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN WIR WOLLEN CODE SEHEN WIR WOLLWN CODE SEHEN
In einem Post so viele Rechtschreibfehler...
-
Haben die in der ct dazu schon mal was gesagt, zu dem versauten Test?
-
[quote="Sgt. Nukem"]
HANZO schrieb:
In einem Post so viele Rechtschreibfehler...
da haste den falsch'n zittiert *fg*
rapso->greets();
-
Du jetzt auch
btw wir warten immer noch auf den Source
-
Also, wenn jemand die Bin´s des Directx9 SDK´s startet(Demo´s und Tutorial´s), so wird er merken das in den Anwendungen die in C#, VB und C++ vorhanden sind sich immer das gleiche herausstellt! Visual Basic ist mit c++ gleich auf und c# liegt immer dahinter.
Warum?
-
Wieviel hat das VB denn überhaupt damit zu tun ?
Kann ich mir das nicht so vorstellen das die Hauptarbeit von seitens der DX Api gemacht wird ?