Anzeige:
Ergebnis 1 bis 6 von 6

Thema: [C++] Dateien einlesen in C schneller als in C++!?

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.01.2002
    Ort
    DarkTown
    Beiträge
    40

    [C++] Dateien einlesen in C schneller als in C++!?

    Hey,
    ich habe ein C++-Programm geschrieben, welches u. a. Textdateien einliest.
    Diese Dateien können schon mal bis zu 200 MB gross ein. Für das Dateihandling
    habe ich die C-Datentypen (FILE, usw.) und C-Funktionen(fopen, fgets, fclose) verwendet.
    Jetzt habe ich das gesamte Dateihandling auf C++ umgeschrieben, d.h. ich
    habe mit ifstream und getline() gearbeitet. Beim testen ist mir aber aufgefallen,
    dass die Stream-Variante viel langsamer ist als die C-Version.
    Ich habe mal die Zeiten gemessen, die die zwei Versionen benötigen um eine
    1,6 MB grosse ASCII-Datei einzulesen. Ich habe nur die Zeiten für das eigentliche
    einlesen gemessen:
    C-Version: 0,02 Sekunden
    Stream-Version: 2,28 Sekunden

    Ist das immer so das Datei-Streams langsamer sind? Hab bis jetzt immer
    mit den C-Datentypen gearbeitet.

    Hier mal der Code für das einlesen (Stream):
    Code:
    ifstream file;
    string strBuffer;
        .
        .  
    while(!file.eof())
    {
      getline(file, strBuffer, '\n');
    }
    When there`s no more room in Hell
    the dead will walk the Earth

  2. #2
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Ja also C++ sollte schon etwas langsamer sein, aber gleich um das 100 fache!?
    Die iostream Klassen sind ja auch nur wrapper um die C-Funktionen.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Vermutlich ein Fehler im Compiler oder vielmehr der C++ Bibliothek. Benutzt du zufälligerweise den GCC? Ich kann mich erinnern das da in letzter Zeit einige Performance Probleme mit C++ Streams behoben wurden. Die dürften größtenteils aber erst im GCC 3.4[.1] und im kommenden 3.5 enthalten sein.

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.01.2002
    Ort
    DarkTown
    Beiträge
    40
    Geschrieben und compiliert habe ich das Programm mit Visual C++ 6 unter Win2000.
    Ich werde es aber bei Gelegenheit auch mal unter Linux mit dem gcc compilieren und testen.
    When there`s no more room in Hell
    the dead will walk the Earth

  5. #5
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    getLine....

    reserviert getline nicht jedesmal einen neuen String?

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    bringts denn was wenn du mit reserve() den String von Anfang an schon genug gross machst?
    http://www.cppreference.com/cppstrin...s.html#reserve

    Sonst muss er wohl ständig resized werden - und das heisst wohl umkopieren.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •