Einlesen einer Datei: Geschwindigkeitsoptimierung



  • Nein, ein Vektor ist quasi so eine Art virtuelles Array, in dem Vektor steht
    nun jede Zeile als String.

    Devil



  • Original erstellt von Konstantin:
    **

    using namespace std;
    ifstream FileIn("Main.cpp");
    if (FileIn)     // Falls FileIn gültig ist.
    {
        string FullText;
    
        for (string ReadString; getline(FileIn, ReadString); )         
            FullText += ReadString;           
    }
    

    **

    In FullText steht jetzt alles drin, nur ohne Newlines.
    Wenn du willst kannst du ja noch ein \n in der For-Schleife an FullText dranhängen.



  • Na gut, das hatte ich schon verstanden. Aber möchte die Datei doch gerne in _einen_ String haben. Das _muss_ doch irgenwie gehen? Bei einem Texteditor ist der Inhalt der Datei doch auch sofort angezeigt!

    CU
    Konstatin

    PS: Das versteh ich echt nicht, wieso das bei mir so lange dauert...



  • Habe mit folgendem Code eine 350 kb Datei eingelesen. Das einlesen dauert ca. 0.05 sec.Warum soll es dann bei dir so lange (30 sec) dauern ?
    Da muß wohl irgendwas anderes faul sein ...

    int main()
    {
       ifstream in;
       string buf,datei="";
       in.open("Text.txt");
       while(!in.eof())
       {
          getline(in,buf);
          datei+=buf;
       }
       in.close();
       cout << datei;
       return 0;
    }
    


  • Liest vielleicht von Diskette 😉



  • ...oder er kompiliert mal die Releaseversion.

    Devil



  • was mir noch einfaellt: du solltest vielleicht den Funktions-rueckgabewert nicht by-value machen, sonst wird der ganze String (also 300 Kb) nochmal kopiert....



  • Das kann aber alles niemals so lange dauern, selbst wenn ich 1000 mal 300 kb ine einen string kopiere, dauert das keine 30 sec.



  • Original erstellt von Blue-Tiger:
    was mir noch einfaellt: du solltest vielleicht den Funktions-rueckgabewert nicht by-value machen, sonst wird der ganze String (also 300 Kb) nochmal kopiert....

    es sei denn, der compiler beherrscht named return value optimization



  • @Winn:
    Nein, ich lese von Festplatte.

    @devil81:

    ...oder er kompiliert mal die Releaseversion.

    Hm, da bin ich jetzt überfragt. Wie kompiliert man denn nur die Releaseversion?

    @<Stefan>:
    Das versteh ich ja auch nicht... Ich hab ja extra MsgBoxen eingefügt, um zu sehen, ob das Problem wirklich beim einlesen besteht. Es ist wirklich die Schleife, die so lange dauert.
    Wenn ich gleich zu Hause bin, werde ich deinen Code noch mal nehmen und die Zeit mitstoppen lassen. Das Ergebnis werde ich euch dann mitteilen.

    Cu & Thx
    Konstantin


Anmelden zum Antworten