AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory leak durch funktion readln

Ein Thema von danieldelphi · begonnen am 12. Mär 2015 · letzter Beitrag vom 13. Mär 2015
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    
danieldelphi

Registriert seit: 12. Mär 2015
38 Beiträge
 
#11

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:40
Wann wird die Stringliste meldung geleert?
die wird gar nicht geleert, bzw beim beenden des programms, aber da kommen nur ein paar zeilen rein, die auf dem form angezeigt werden
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:40
Was wäre dabei der Vorteil?
Byteweise einlesen heißt, aber auch, dass ich nicht automatisch ganze zeilen einlesen kann oder doch?
Performance...

Gerade bei 2GB große Files...

Wobei Du natürlich NICHT "Byteweise" lesen solltest sondern:

Sondern eher eine Lesepuffer von 16MB oder größer nehmen...

Und dann die 16MB direkt in einem Rutsch mit einen Blockread lesen...

In Memory dann mit einem Zeiger durchlaufen und entsprechend per Blockwrite wegschreiben...
NIX ist schneller auch nicht der FileStream...
Der nutz nämlich genau die gleichen Routinen intern wie der Blockread... Nur mit mehr Overhead!

Mavarik
  Mit Zitat antworten Zitat
danieldelphi

Registriert seit: 12. Mär 2015
38 Beiträge
 
#13

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:43
Was wäre dabei der Vorteil?
Byteweise einlesen heißt, aber auch, dass ich nicht automatisch ganze zeilen einlesen kann oder doch?
Performance...

Gerade bei 2GB große Files...

Wobei Du natürlich NICHT "Byteweise" lesen solltest sondern:

Sondern eher eine Lesepuffer von 16MB oder größer nehmen...

Und dann die 16MB direkt in einem Rutsch mit einen Blockread lesen...

In Memory dann mit einem Zeiger durchlaufen und entsprechend per Blockwrite wegschreiben...
NIX ist schneller auch nicht der FileStream...
Der nutz nämlich genau die gleichen Routinen intern wie der Blockread... Nur mit mehr Overhead!

Mavarik
okay also du sagst 16 mb blockweise einlesen und damit dann weiter arbeiten?
kann man da denn noch gut nahc zeilen unterscheiden? ich gehe mal davon aus, dass es schwierig sein wird 16 mb auszulesen ohne dabei eine zeile zu zerschneiden, denn meine zeilen stellen zusammenhängede datensätze dar:/
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:44
Speichermäßig ist das doch am einfachsten mit zeilenweiser String-Bearbeitung, oder?

Delphi-Quellcode:
procedure Die_Schleife_Stirbt_Nicht(Von,Nach: string);
var
  T1, T2: TextFile;
  Zeile: string;
begin
  AssignFile(T1,Von); // bzw. Assign(T1,Von); in D6
  Reset(t1);
  AssignFile(T2,Nach);
  Rewrite(T2);
  while not EOF(T1) do begin
    ReadLn(T1,Zeile);
    // Zeileninhalt bearbeiten
    WriteLn(T2,Zeile);
  end;
  CloseFile(T1); // bzw. Close(T1) in D6
  CloseFile(T2);
end;
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
danieldelphi

Registriert seit: 12. Mär 2015
38 Beiträge
 
#15

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:47
Speichermäßig ist das doch am einfachsten mit zeilenweiser String-Bearbeitung, oder?

Delphi-Quellcode:
procedure Die_Schleife_Stirbt_Nicht(Von,Nach: string);
var
  T1, T2: TextFile;
  Zeile: string;
begin
  AssignFile(T1,Von); // bzw. Assign(T1,Von); in D6
  Reset(t1);
  AssignFile(T2,Nach);
  Rewrite(T2);
  while not EOF(T1) do begin
    ReadLn(T1,Zeile);
    // Zeileninhalt bearbeiten
    WriteLn(T2,Zeile);
  end;
  CloseFile(T1); // bzw. Close(T1) in D6
  CloseFile(T2);
end;
gebnau das ist ja der ausgangspunkt, so ist am ende der arbeitsspeicher mit der einzulesesnden datei gefüllt.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:47
das ist delphi 6.
hmm cool

Unter Delphi 6 ist ein String immer ein Shortstring... Oder verwechsele ich da gerade etwas? Ist zu lange her...

Bist Du sicher, das Deine Zeilen in den Textdateien kürzer als 255 Zeichen sind?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#17

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:49
Du bist anscheinend bei Delphi 1 stehengeblieben, in Delphi 2 bis 2007 ist ein String ein AnsiString.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
danieldelphi

Registriert seit: 12. Mär 2015
38 Beiträge
 
#18

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:49
das ist delphi 6.
hmm cool

Unter Delphi 6 ist ein String immer ein Shortstring... Oder verwechsele ich da gerade etwas? Ist zu lange her...

Bist Du sicher, das Deine Zeilen in den Textdateien kürzer als 255 Zeichen sind?

Mavarik
ich bin mir nicht sicher, bzw ich weiß, dass die zeieln teilweise über 300 zeichen haben, aber zeile ist bei mir auch ein char array mit 500 zeichen den ich dann in der procedure in einen string umwandel, siehst du da ein problem dass ich nicht sehe?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:50
du bist anscheinend bei delphi 1 stehengeblieben, in delphi 2 bis 2007 ist ein string ein ansistring.
ok ok...
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#20

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:53
gebnau das ist ja der ausgangspunkt, so ist am ende der arbeitsspeicher mit der einzulesesnden datei gefüllt.
Aber genauso mach ich das schon jahrelang mit großen Textdateien ohne Probleme. Schau dir deinen Code genauer an, da musst du ein Problem haben.

Was soll z.B. das...wenn angenommen "Zeile" eine Stringvariable ist:

Delphi-Quellcode:
//BG2010: Wenn Zeile mit Hochkomma beginnt, dann Einlesevorgang abbrechen...
      if zeile[0] = '''then break;
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    


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 05:02 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