AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeilen hinzufügen - Probleme mit grossen Logdateien
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilen hinzufügen - Probleme mit grossen Logdateien

Ein Thema von hirnstroem · begonnen am 23. Nov 2005 · letzter Beitrag vom 23. Nov 2005
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Zeilen hinzufügen - Probleme mit grossen Logdateien

  Alt 23. Nov 2005, 08:24
'loha Folks

in einer Applikation werden Logdateien etwa folgendermassen erstellt:

Delphi-Quellcode:
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;
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 -.-

Kennt jemand eine Möglichkeit, wie man solche Probleme elegant umschiffen kann?

thx und Grüsse
hirnstroem
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Zeilen hinzufügen - Probleme mit grossen Logdateien

  Alt 23. Nov 2005, 08:27
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zeilen hinzufügen - Probleme mit grossen Logdateien

  Alt 23. Nov 2005, 09:44
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...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Zeilen hinzufügen - Probleme mit grossen Logdateien

  Alt 23. Nov 2005, 11:27
Hallo.

Ich weiß nicht, wie DU die Daten wegschreibst, aber das hier könnte vom Prinzip her auch bei dir funktionieren:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Zeilen hinzufügen - Probleme mit grossen Logdateien

  Alt 23. Nov 2005, 12:53
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;
  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 04:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz