Geschwindigkeitsvergleich erstaunlich
-
Ich habe eben zwei Programme geschrieben, die mir nur zum Spass 100000 Zahlen ausgeben.
Eines verwendet "cout << " und das andere "System::Console::Write()"Der Vergleich ist überraschenderweise so ausgefallen, das cout im Durchschnitt 4400 Millisekunden brauchte, und System::Console::Write() nur knappe 1000.
Aber auch printf() lag mit 1200 Millisekunden hinter dem .NET PendantHier der Code:
#include <iostream> #include <Windows.h> #include <MMSystem.h> int main() { int iTime; iTime = timeGetTime(); for(int i = 0; i < 100000; ++i) System::Console::Write(i); // bzw. cout << i; oder printf("%d",i); iTime = timeGetTime() - iTime; printf("\n%d\n", iTime); return 0; }
Kann mir das jemand erklären?
-
Du solltest Win32-native gegen .NET vergleichen!
Und nicht beides mit /clr übersetzen... da verfälscht Du Dir nur die Ergebnisse, das beim Aufruf von unmanaged Code (cout) eine Transition von managed=>unmanaged=>cout=>managed erfolgt...
-
Ich hab nicht beides mit /clr kompiliert, sondern so wie es sich gehört cout nativ ohne /clr kompiliert!
Ich habe zwar danach die cout Variante mit /clr getestet, bekam jedoch die gleiche Geschwindigkeit ( obwohl beim ersten Start 11 Sekunden vergingen ).