![]() |
Zeilen hinzufügen - Probleme mit grossen Logdateien
'loha Folks
in einer Applikation werden Logdateien etwa folgendermassen erstellt:
Delphi-Quellcode:
Nun ist dies ja gut und schön und funktioniert auch recht gut. Leider entstehen mit anwachsender grösse der Logdatei Probleme mit der CPU Auslastung sowie mit dem Zeitintervall. In der Praxis sieht das so aus, dass zu Testzwecken etwa 12 Stunden Lang geloggt wurde, in diesen 12 Stunden wuchs die Lögdatei auf knapp 9 MB an, die CPU Auslastung war auf 100 % und die Software benötigte, in rasch abwechselndem Rhytmus, zwischen 30 und 40 MB Arbeitsspeicher. Da der Rechner seine besten Jahre schon hinter sich hat, schraubt er so ziemlich auf der Äussersten Rille, was nicht gut ist -.-
procedure TFCDPS_Observer.LogFileTimerTimer(Sender: TObject);
var iRow: integer; sl: TStringList; begin sl := TStringList.Create; try if FileExists(LogFilePfad) then begin sl.Add(''); end; sl.SaveToFile(LogFilePfad); finally sl.Free; end; end; Kennt jemand eine Möglichkeit, wie man solche Probleme elegant umschiffen kann? thx und Grüsse hirnstroem |
Re: Zeilen hinzufügen - Probleme mit grossen Logdateien
verwende doch zum speichern einen filestream.
dann musst du nicht die gesamte Liste im Speicher halten, sondern nur den aktuellen Eintrag. dieses Thema wurde erst kürzlich hier behandelt. Such einfach mal nach FileStream. |
Re: Zeilen hinzufügen - Probleme mit grossen Logdateien
Vielen Dank RavenIV,
leider sehe ich beim FileStream aber irgendwie die Möglichkeit nicht, wie man Zeilen hinzufügen kann. Die Daten werden zwar gespeichert, aber bei jedem neuen Logeintrag wird alles überschrieben, die Einzelnen einträge, welche von einem Array stammen sind nun allesamt auf derselben Zeile. Wenn mir jemand sagen könnte, wie sich dies beheben lässt... |
Re: Zeilen hinzufügen - Probleme mit grossen Logdateien
Hallo.
Ich weiß nicht, wie DU die Daten wegschreibst, aber das hier könnte vom Prinzip her auch bei dir funktionieren:
Delphi-Quellcode:
Grüße vom marabu
procedure Log(filename, msg: string);
var fs: TFileStream; fm: Word; begin if FileExists(fileName) then fm := fmOpenReadWrite else fm := fmCreate; fs := TFileStream.Create(fileName, fm, fmShareDenyWrite); with fs do begin Position := Size; msg := msg + #13#10; fs.WriteBuffer(msg[1], Length(msg)); fs.Free; end; end; |
Re: Zeilen hinzufügen - Probleme mit grossen Logdateien
Ah, herrlich, danke marabu und RavenIV,
hab das jetzt folgendermassen gelöst:
Delphi-Quellcode:
procedure TFCDPS_Observer.LogFileTimerTimer(Sender: TObject);
var iRow: integer; LogFileString: string; fs: TFileStream; fm: word; begin if FileExists(LogFilePfad) then begin fm := fmOpenReadWrite; end else begin fm := fmCreate; end; fs := TFileStream.Create(LogFilePfad, fm); with fs do begin Position := Size; LogFileString := DateTimeToStr(Now) + #13#10; for iRow := 0 to sg_data_cd.RowCount - 1 do begin if sg_data_cd.Cells[0, iRow] <> '' then begin LogFileString := LogFileString + sg_data_cd.Rows[iRow].CommaText + ',CD' + #13#10; end; end; LogFileString := LogFileString + #13#10; for iRow := 0 to sg_data_ld.RowCount - 1 do begin if sg_data_ld.Cells[0, iRow] <> '' then begin LogFileString := LogFileString + sg_data_ld.Rows[iRow].CommaText + ',LD' + #13#10; end; end; LogFileString := LogFileString + #13#10; fs.WriteBuffer(LogFileString[1], Length(LogFileString)); fs.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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-2025 by Thomas Breitkreuz