Announcement

Collapse
No announcement yet.

Text Datei mit festen Feldgrößen einlesen ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hallo Jochen,

    300 KByte ist halt noch klein un winzig. Eventuell liegt die Datei bei Dir bereits im Cache. Bei großen Dateien ist das aber i.d.R. nicht möglich. Neben dem einlesen müssen die Daten dann auch noch verarbeitet werden. Genau da macht sich aber die technische Implementierung der "TStringList" negativ bemerkbar.

    Wie gesagt es spielt nur eine Rolle wenn man mit größeren Dateien hantieren muß.

    Nach dem vollständigen OOP-Redesign war es einfach zu pflegen und zu erweitern. Es hat natürlich einiges an Zeit gekostet.

    Aufwand und Nutzen müssen natürlich immer in einem gesunden Verhältnis zueinander stehen. Programminterne Daten verwalte ich genauso wie Du in Datenbanken. dafür sind sie schließlich auch da.

    Gruß und schönes Wochenende

    Torste

    Comment


    • #17
      Nochmal Hallo Torsten,

      hat mit keine Ruhe gelassen. TStringList mit 1 Million 'Datensätze', a 10 Felder, je 15 Zeichen lang (Datei 148 MB):

      Objekte einfügen: 4576 ms<BR>
      StringList speichern: 8412 ms<BR>
      StringList laden: 6008 ms <BR>
      Objekte einlesen: 4376 ms (inklusive Trim, da jeweils 5 Leerzeichen rechts in jedem Feld)<BR>

      Jochen ;

      Comment


      • #18
        Hallo Jochen,

        ich werd mir das mal am Wochenende anschauen.

        Gruß

        Torste

        Comment


        • #19
          Hallo Torsten,

          soll ich den Code mal posten (ist aber BCB)?

          Irgendwann ist mir mal aufgefallen, daß TStringList VIEL schneller ist als TRichEdit. Ab und zu ereuge ich Listen über zig hundert Seiten. Das mach ich mittlerweile auch in TStringList und weise dem TRichEdit anschließend nur den den Text des TStringList zu (RichEdit.Text := StringList.Text). Bei diesem Programm dauerte das vorher ein paar Minuten, jetzt ist es nach ein paar Sekunden fertig! Funktioniert allerdings nur bei unformatiertem Text...

          Grüße und ebenfalls Schönes Wochenende,

          Joche

          Comment


          • #20
            Hallo Jochen,

            ich habe Deinen Code nach Delphi portiert und ein paar kleine Änderungen vorgenommen.

            Deine Meßergebnisse kann ich aber nicht nachvollziehen. Um halbwegs realistische Meßergebnisse zu erhalten habe ich auf das ständige Erstellen der Datei verzichtet und nur das Laden und Verarbeiten gemessen. Meiner Meinung nach ist das ein realistischeres Testszenario.
            Auf meiner Athlon 1 GHz Maschine mit 512 MB-Speicher und in frisch gebootetem Zustand benötigt mein Computer zum Laden mit Deinem leicht modifiziertem Code ca. 41 Sekunden und ca. 9 Sekunden für die Verarbeitung.

            Mit meinem Code dauert das Laden ca. 39 Sekunden und das Verarbeiten ca. 6 Sekunden.

            Je länger ein Datensatz ist desto größer wird der Performanceunterschied deutlich.
            Bei einer Datensatzlänger von 450 Byte verändert sich die Verarbeitungszeit auf 13 beziehungsweise 7 Sekunden.

            Gruß

            Torste

            Comment


            • #21
              Hallo Torsten,

              ich hab' einen Athlon XP2400+, 512 MB 266MHz (CL2). Aber das der beim Laden 6 x schneller sein soll, glaub' ich nicht. Insbesondere, da die Verarbeitungszeit nur 1,5 Sekunden länger ist. Oder hast Du eine so langsame Platte?

              Grüße Joche

              Comment


              • #22
                Hallo Jochen,

                der Computer ist knapp 2 Jahre alt und ich habe mir damals 3 flotte Platten einbauen lassen. Im Vergleich zu aktuellen Platten würde ich max. den Faktor 2 für prinzipiell möglich halten. Betriebssystem ist bei mir WinNT 4.0. Das sollte aber nicht ausschlaggebend sein.

                Laß mal das Erstellen der Datei raus und teste auf einem neu gebooteten System. Die Meßergebnisse sehen dann bestimmt anders aus.

                Gruß

                Torste

                Comment


                • #23
                  Hallo Torsten,

                  hab' das System neu gestartet: <BR>
                  Objekte einfügen: 4427 ms <BR>
                  StringList speichern: 20429 ms <BR>

                  Danach nochmal neu gestartet: <BR>
                  StringList laden: 17829 ms <BR>
                  Objekte einlesen: 4547 ms <BR>

                  Ist aber immer noch deutlich schneller als bei Dir. Das sind Zeiten, mit denen ich bei einer 148 MB Datei durchaus leben kann. Vielleicht doch ein Unterschied zwischen Delphi und BCB?

                  Meine C:-Platte ist auch ca. 2 Jahre alt, daran sollte es also nicht liegen...

                  Grüße

                  Joche

                  Comment


                  • #24
                    Hallo Andreas,

                    ich weiß, wir sind ein bißchen vom Thema abgekommen. Laß Dich davon nicht irritieren. Funktioniert's denn mittlerweile? Wenn Du noch Probleme mit dem BCB-Code hast, Torsten hat ihn schon übersetzt und postet ihn bestimmt auch...

                    Grüße

                    Joche

                    Comment


                    • #25
                      Hallo Jochen,

                      es sieht faßt so aus als ob es der mehr als doppelt soschnelle Prozessor ist.

                      Es wundert mich zwar das sich das so deutlich bei Dateioperationen bemerkbar machen soll aber bei dem Einlesen der Objekte würde die halbe Zeit gut passen. Eventuell spielt das Betriebssystem ja doch auch noch eine kleine Rolle.

                      Heute Abend könnte ich das Ganze ja mal noch mit Kylix probieren.

                      Bei Bedarf poste ich auch den Sourcecode.

                      Gruß

                      Torste

                      Comment


                      • #26
                        Hallo Torsten,

                        ja ich hätte da auch ein anderes Bild erwartet. Ich hab' das hier mal auf einem Celeron 733, 128 MB RAM getestet:<BR>
                        Einlesen: ca. 3 Minuten <BR>
                        Auswerten: ca. 1,5 Minuten <BR>
                        Hier ist es aber definitiv auf mangelnden Arbeitsspeicher zurückzuführen... Sagt also nicht wirklich was aus.

                        Wenn Du magst kannst Du mir ja die Delphi-Test-Exe mal mailen. Dann sollte dann schon eher was aussagen: [email protected].

                        Grüße Joche

                        Comment


                        • #27
                          Hallo Jochen,

                          ich schicke es Dir heute Abend.

                          Gruß

                          Torste

                          Comment


                          • #28
                            OK

                            Comment


                            • #29
                              Hallo Jochen,
                              nein ich habe den Code noch nicht ins Delphi übersetzt. Ich habe gerade erst die Benchmark - Mails durchgelesen ;-) Zeit spielt in meinem fall keine Rolle. Das einlesen der Daten in die DB soll Nachts geschehen und ich programmiere nur so nebenbei, ohne Termindruck. Trotzdem bin ich natürlich auch an eine schnelle und kompakte Lösung des Problems interessiert.
                              Gruss
                              Andrea

                              Comment


                              • #30
                                Hallo Andreas,

                                die Lösung über TStringList ist definitiv einfacher und da die Ausführungsdauer keine Rolle spielt...

                                >Das einlesen der Daten in die DB soll Nachts geschehen.

                                Heißt das, die Textdatei ist nur ein Übergabemedium, mit dem neue, oder aktualisierte Daten in eine echte DB eingelesen werden?

                                Grüße Joche

                                Comment

                                Working...
                                X