AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Performancefrage: Anwendung von Append/Writeln/Closefile
Thema durchsuchen
Ansicht
Themen-Optionen

Performancefrage: Anwendung von Append/Writeln/Closefile

Ein Thema von martinf16 · begonnen am 19. Jul 2008 · letzter Beitrag vom 20. Jul 2008
Antwort Antwort
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 19. Jul 2008, 02:12
Hallo!
Mein Programm beherbergt eine Menge Funktionen, die alle relativ schnell und häufig hintereinander und vor allem durcheinander Zeilen an das Ende eines Textfiles hängen (append und writeln).

Nun ist meine Frage ob die Vorgehensweise empfehlenswert ist, jedes Mal das Textfile zu öffnen, um es anschließend sofort wieder zu schließen (wirkt sich das stark aus?). Oder ist es möglich das File zum Starten des Programms zu öffnen und es dann erst beim Beenden des Programms zu schließen?!
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 19. Jul 2008, 02:51
Verwende doch eine Stringlist (TStringList F1 in Delphi ). Diese kannst du beim Programmstart laden,
dann die Zeilen bearbeiten und diese am Programmende speichern.

Klar ist das herumwirtschaften mit öffnen und schliessen der Datei auf der Festplatte nicht empfelenswert.
Logischerweise wird dadurch die Festplatte höher beansprucht.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 19. Jul 2008, 03:12
Allerdings solltest du beachten, dass bei einer TStringlist alle Daten im RAM abgelegt werden. bei großen Dateien kann das zu eienr sehr hohen Speicherauslastung führen.

Was spricht denn dagegen, die File-Variable irgendwo im programm zwischenzuspeichern (z.B. als globale Variable oder besser als privates Feld der Form) und dann immer wieder zu benutzen?

Delphi-Quellcode:
TForm1 = class(TForm)
{...}
private
  FTextFile: textfile;
{...}
end;

// Programmstart:
AssignFile(FTextFile,'log.txt');


// "Andauernd aufgerufene" Methode:
WriteLn(FTextFile,'Hallo Welt');


// Programmende:
CloseFile(FTextFile);
Kann sein, dass hier irgednwo ein Fehler wie z.B. ein falscher Prozedurenname ist, denn ich hab ehrlich gesagt noch nie mit den Pascalfunktionen für Dateien gearbeitet, sondern immer nur mit Streams.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 19. Jul 2008, 03:23
Okay.. Die große Speicherauslastung möchte ich nicht riskieren, deswegen war meine Idee auch das ganze in das Textfile auszulagern. Eine Überlegung war auch dass nicht alles verloren gehen soll wenn das Programm einmal ungeschickt beendet wird und die End-Speicherung daher ausbleibt.

Dass es so funktioniert wie NamenLozer vorgeschlagen hat wusste ich bislang noch nicht.. Aber befinden sich dabei nicht auch alle Daten permanent im RAM?! Gut, man könnte die Daten auch zwischenspeichern wenn sie eine bestimmte Größe überschreiten..

Prinzipiell bin ich für alle Möglichkeiten offen, hauptsache am Ende ist die Datei geschrieben und hat möglichst wenig Performance gekostet..
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 19. Jul 2008, 08:35
[quote="turboPASCAL"Klar ist das herumwirtschaften mit öffnen und schliessen der Datei auf der Festplatte nicht empfelenswert.
Logischerweise wird dadurch die Festplatte höher beansprucht.[/quote]
Logischerweise wird die Festplatte nicht notwendigerweise höher beansprucht, da es soetwas wie einen Cache gibt. Das explizite Schließen hat den Vorteil, das Du sicher sein kannst, das Deine Daten auch wirklich gespeichert sind, bei einer Stringlist wäre bei einem Programmabsturz nichts gesichert.

Bis auf den Umstand, das die AssignFile/Append/WriteLine/Close-Routinen veraltet sind, sprichts nichts weltbewegendes gegen den Einsatz.

Mit wieviel Aufrufen/Schreibvorgängen rechnest Du denn?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 20. Jul 2008, 01:37
Wenn die Routinen veraltet sind, was würde man denn dann heute stattdessen nehmen?!

Geschätz wären es pro Minute bis zu 200 Aufrufe.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 20. Jul 2008, 03:00
...und wie gross ist die zu verwaltende Datenmenge ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Performancefrage: Anwendung von Append/Writeln/Closefile

  Alt 20. Jul 2008, 11:14
Erstelle einen separaten Thread, der die Daten im Hintergrund auf die Platte schreibt.

Das moderne Pendant sind überigens Streams, hier wäre es ein TFileStream. Aber wie gesagt, mit AssignFile geht das schon.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 02:55 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