Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
12.01.2002, 21:05
Mazze



Hi!
Ich hab mal einen kleinen Test gemacht, ob das Lesen von einer Datei in C oder in C++ schneller geht.
Dafür habe ich in C diesen Code genommen:
Quellcode:
void countCchars(const char* filename)
{
FILE* file;

int ch;
int x = 0;

file = fopen(filename, "ra");

while((ch = getc(file)) != EOF)
{
if((char)ch != '\n')
x++;
}

printf("Chars: %i", x);
}

und in C++ diesen:
Quellcode:
void countchars(const char* filename)
{
std::ifstream input(filename);

char ch;
int x = 0;

while(input.get(ch))
{
if(ch != '\n')
x++;
}

std::cout << "Chars: " << x << std::endl;
};

Ich hab die Zeichen einer Datei gezählt, die 1000000 Zeichen hat.

Zum Stoppen hab ich GetSystemTime() verwendet!
Ich hab die Anzahl der Zeichen (ohne /n) 10 mal zählen lassen und dann den Mittelwert genommen!

Meine Ergebnise (AMD K6 233):
C: 258 Millisec.
C++: 966 Millisec.

Das wundert mich schon sehr!
Wie kommt es, dass C++ fast 4 mal so langsam ist wie C?
Hab ich den C++ Code nicht richtig programmiert, oder ist C++, das ja mit Streams arbeitet, so langsam?

thx
Matze

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
001
12.01.2002, 21:17
Another1



eventuell sind auch die ausgaberoutinen zu beachten, falls du den fehler gemacht haben solltest sie mitzustoppen. ahh und benutz mal clock() zum messen, is glaub ich genauer.

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
002
12.01.2002, 21:27
Mazze



Ich hab halt jeweils die Ausgabe der Chars mitgestoppt. Mehr nicht.
Ich glaub nicht, dass das soviel rausreißt!

Ich versuch mal clock!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
003
13.01.2002, 12:32
Prefect



Another1: Was ist schon eine Ausgaberoutine gegenüber 1000000 Eingaberoutinen? Das macht sicher keinen Unterschied.

Ansonsten: War das nicht zu erwarten? Im Endeffekt sind diese ganzen IO-Streams ja nur aufgeblasene Wrapperklassen für die Standard-C-Funktionen. Da braucht einen der Geschwindigkeitsverlust nicht zu wundern.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
13.01.2002, 20:35
Mazze



Zitat:
Prefect postete
Im Endeffekt sind diese ganzen IO-Streams ja nur aufgeblasene Wrapperklassen für die Standard-C-Funktionen

Achso. Wusste ich nicht!
thx!

@Another1: clock() ist gleich genau, aber einfacher zu benutzen!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche