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 Pendant

    Hier 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 ).


Anmelden zum Antworten