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
mm1256

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:11
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?
Und warum liest du nicht gleich einen String ein? Ich denke, hier (in der Umwandlung) liegt dein (Speicher-)Problem
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:36
Irgendwann hab ich aufgegeben mich durch dieses Dateichaos zu wühlen.
Den Sourcen würde eine logische überarbeitung und vor allem Auftrennung ganz gut tun.
wenn das Einlesen/Schreiben der Strings nicht so richtig fluppt, wie wäre es textbuf zu nutzen? so zwischen 8k und 16k puffergroße ist man ganz gut unterwegs.

Ein if string[0]='''' ist nicht soo dolle weil man in diesem Falle (bei shortstrings) nachfragt ob der String 39 Zeichen lang ist.

Gruß
K-H

@Mavarik
warum auch immer, aber seit D7 ist das read über ein filestream schneller als ein blockread.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (12. Mär 2015 um 11:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 11:44
@Mavarik
warum auch immer, aber seit D7 ist das read über ein filestream schneller als ein blockread.
Nöö... Debug dich mal durch... Der FileStream hat 3 Calls mehr bevor er genau in die selbe Routine springt wie der Blockread.

Mavarik
  Mit Zitat antworten Zitat
mm1256

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:01
Aber wenn ihr schon Calls zählt, beiden Varianten ist gemeinsam: Die Datenzeile muss erst wieder "manuell" extrahiert werden, und darum ist (meiner Meinung nach) ReadLn(TxtVariable,MeinDatenString) die schnellste Lösung, weil hier die Länge der Stringvariable gleich mit gesetzt wird.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:14
Aber wenn ihr schon Calls zählt, beiden Varianten ist gemeinsam: Die Datenzeile muss erst wieder "manuell" extrahiert werden, und darum ist (meiner Meinung nach) ReadLn(TxtVariable,MeinDatenString) die schnellste Lösung, weil hier die Länge der Stringvariable gleich mit gesetzt wird.
Delphi macht intern nix anderes...

Kommt darauf an, ob und was ich mit dem String machen will...
  Mit Zitat antworten Zitat
mm1256

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:26
Kommt darauf an, ob und was ich mit dem String machen will...
Na ja, das wissen wir doch, seitdem er seinen Code geposted hat. Die Längenermittlung der eingelesenen Daten (CR, LF, CRLF oder EOF) der System.pas zu überlassen finde ich jedoch schon eine gute Idee.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:31
Naja, wenn ich es richtig sehe, bekommt "autodatei" kein Close.
Das mag Windows überhaupt nicht, weil dadurch File-Handles nicht wieder freigegeben werden. Das kann in der Folge dann auch zu Memory-Leaks führen.

Mal abgesehen davon, dass in der inneren While-Schleife ein Exit steht. Wodurch keine einzige Datei-Variable mehr freigegeben wird.

Oder habe ich das Close für autodatei übersehen?
Peter
  Mit Zitat antworten Zitat
danieldelphi

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:02
Irgendwann hab ich aufgegeben mich durch dieses Dateichaos zu wühlen.
Den Sourcen würde eine logische überarbeitung und vor allem Auftrennung ganz gut tun.
wenn das Einlesen/Schreiben der Strings nicht so richtig fluppt, wie wäre es textbuf zu nutzen? so zwischen 8k und 16k puffergroße ist man ganz gut unterwegs.

Ein if string[0]='''' ist nicht soo dolle weil man in diesem Falle (bei shortstrings) nachfragt ob der String 39 Zeichen lang ist.

Gruß
K-H

@Mavarik
warum auch immer, aber seit D7 ist das read über ein filestream schneller als ein blockread.
das string[0] ist nicht so wichtig, textbuf werd ich auch mal versuchen,


daaaaanke fpr eure schnellen ausführlichen antworten! super forum! daaaanke.
ich schreib nochmal morgen, hab jetzt n paar meetings. viele grüße
  Mit Zitat antworten Zitat
danieldelphi

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

AW: Memory leak durch funktion readln

  Alt 12. Mär 2015, 12:00
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?
Und warum liest du nicht gleich einen String ein? Ich denke, hier (in der Umwandlung) liegt dein (Speicher-)Problem
warum sollte das einen unterschied machen? ja gut ich versuch es mal.
  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 00:12 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