Warum ist fstream unter Borland so langsam ?



  • Hi,

    ich habe Daten die in binärer Form vorliegen (im Hauptspeicher). Ich möchte sie nun per ofstream speichern.
    Dies geht auch so wie ich es haben will, allerdings langsam ohne Ende. Ich erreiche gerade mal knapp 7MB/s Schreibgeschwindigkeit.

    Da ich die Methode ftream.write(...) nutze, dachte ich: ok, teilst du die Daten eben in kleinere Stücke und rufst dann immer write auf - selbes Problem.

    Also habe ich das ganze mal mit VisualC++ compiliert und siehe da: etwa 50 MB/s.
    Das Borland Produkt das ich nutze ist im Übrigen TurboC++ (also CBuilder 2006)

    Hat jemand ne Ahnung was da schief läuft ?

    mfg GreenHorn



  • Hallo

    Das liegt wohl an einer schlechten Implementation der Standardbibliothek.
    Grundsätzlich kann man die durch externe ersetzen, ich weiß aber nicht welche überhaupt im Turbo-C++ dabei ist.
    Da du eh binär speicherst kannst du aber auch gleich die WinAPI-Dateifunktionen benutzen. Die sind zwar nicht C++ Style aber erlauben maximale Geschwindigkeit.

    bis bald
    akari



  • Hallo,

    Die schnellste mir bekannte Streambibliothek (in STL) ist die STLPort (im BCB6 dabei). Ab dem BCB2006 wird Dinkumware verwendet, welche wesentlich langsamer ist.
    Wenn du nicht auf WinAPI ausweichen willst helfen evtl. auch schon die C-Funktionen.
    Wobei die STLPort-Streams fast genauso schnell sind wie C.


Anmelden zum Antworten