AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Effizientes Einlesen und Verarbeiten von Textdatei
Thema durchsuchen
Ansicht
Themen-Optionen

Effizientes Einlesen und Verarbeiten von Textdatei

Ein Thema von Dalai · begonnen am 30. Jun 2022 · letzter Beitrag vom 4. Jul 2022
Antwort Antwort
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 1. Jul 2022, 14:42
Vermutest Du oder hast Du gemessen?
Da ich aus der Vergangenheit hier im Forum weiß, dass Messen in sich ein komplexes Thema ist, habe ich nicht gemessen. Aber trotzdem dauert das Verarbeiten einer Datei mit 132 solcher Blöcke ca. 2 Sekunden (jedenfalls wenn es im externen Speicherlecksucher läuft). Wie gesagt, nicht besonders genau, weil lediglich mitgezählt.

Zitat:
Was die Laufzeit betrifft denke ich, dass LoadFromFile die allermeiste Zeit benötigt.
Das muss ich in der Tat mit dem Debugger noch genauer untersuchen, ob es wirklich am Laden liegt. Aber ich weiß, dass Strings in Bezug auf Ressourcen deutlich teurer sind als sonstige einfach Datentypen, vor allem weil ich ja nach und nach Zeilen aus der Stringliste lösche. Daher kann ich mir gut vorstellen, dass andere Wege effizienter sind.

Zitat:
Deinen Code verstehe ich nicht, aber das "until Lidx < 0;" kommt mir komisch vor. Lidx kommt sonst nicht vor.
Sorry, das kommt davon, wenn man Code für solche Fragen verkürzt. Hab's grade korrigiert.


Was? Nee, noch nie gehört.
Ich denke dann gibst Du bei Move einen Parameter falsch an.
Dest ist bei Move doch ein var -Parameter. Daraus schloss ich, dass dessen Adresse verändert werden kann. Was ist denn deiner Meinung nach falsch an dem auskommentierten Move-Aufruf?

Grüße
Dalai

Geändert von Dalai ( 1. Jul 2022 um 14:54 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
492 Beiträge
 
Delphi 12 Athens
 
#2

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 1. Jul 2022, 15:43
Effizienter wäre es sicher, wenn das Auswerten der Stringlist ohne IndexOf und Delete gemacht würde. Das sind zusätzliche Speicheroperationen, die nicht nötig wären, wenn man es in etwas so machen würde.

Delphi-Quellcode:
var
  Lsl: TStringList;
  LidxH, LidxF: integer;
  Lstr, Line: string;
  I: Integer;
begin
    Lsl:= TStringList.Create;
    try
      Lsl.LoadFromFile(FFileName);
      LidxH := -1;
      LidxF := -1;
      Lstr := '';
      for I := 0 to lsl.Count -1 do
      begin
        Line := lsl[I].Trim;
        case IndexStr(Line, [PEM_HEADER, PEM_FOOTER]) of
          0: LidxH := I;
          1:
            if LidxH>=0 then
            begin
              NameNotRelevant2(Lstr);
              LidxH := -1;
              LidxF := -1;
              Lstr := '';
            end;
          else
           if LidxH >= 0 then
             Lstr := Lstr + Line;
        end;
      end;
    finally
      Lsl.Free;
    end;
end;
Es geht sicher auch, wie du es machst.
Ob diese Änderung aber schneller ist, kann ich ohne geeignete Daten nicht prüfen.
Um die Zeitdauer von bestimmten Operationen zu messen, werwende ich gerne GetTickCount. Das ist zwar nicht genau, aber man bekommt dadurch grob raus, wo es länger dauert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.609 Beiträge
 
Delphi 12 Athens
 
#3

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 1. Jul 2022, 17:47
Um die Zeitdauer von bestimmten Operationen zu messen, werwende ich gerne GetTickCount. Das ist zwar nicht genau, aber man bekommt dadurch grob raus, wo es länger dauert.
Genauere Zeiten und mindestens ebenso bequem bekommt man es mit TStopWatch aus System.Diagnostics:
Delphi-Quellcode:
var sw := TStopWatch.StartNew;
...
Writeln(sw.ElapsedMilliseconds);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Effizientes Einlesen und Verarbeiten von Textdatei

  Alt 1. Jul 2022, 18:08
@Uwe
Das hat den Vorteil einer seeeehr genauen Zeitmessung, weil die intern verwendete Funktion QueryPerformanceCounter einen "High Resolution Counter" mit einer Genauigkeit von 0.00083 ms (!) abfragt.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz