Delphi-PRAXiS
Seite 4 von 7   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Memory leak durch funktion readln (https://www.delphipraxis.net/184250-memory-leak-durch-funktion-readln.html)

mm1256 12. Mär 2015 12:01

AW: Memory leak durch funktion readln
 
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.

danieldelphi 12. Mär 2015 12:02

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von p80286 (Beitrag 1293174)
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
Delphi-Quellcode:
textbuf
zu nutzen? so zwischen 8k und 16k puffergroße ist man ganz gut unterwegs.

Ein
Delphi-Quellcode:
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

Mavarik 12. Mär 2015 12:14

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von mm1256 (Beitrag 1293182)
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...

mm1256 12. Mär 2015 12:26

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von Mavarik (Beitrag 1293186)
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.

Jasocul 12. Mär 2015 12:31

AW: Memory leak durch funktion readln
 
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?

mm1256 12. Mär 2015 12:47

AW: Memory leak durch funktion readln
 
Richtig, das sind zwei weitere Probleme. Aber, der TE hat doch mit FastMM geprüft. Müsste der dann nicht anschlagen?

Jasocul 12. Mär 2015 12:51

AW: Memory leak durch funktion readln
 
Weiß ich nicht sicher, da ich mich mit FastMM nicht besonders gut auskenne.
Allerdings ist das mit den File-Handles in dieser Konstellation meines Wissens ein Windows-Problem. Das könnte evtl. an FastMM vorbei gehen.

EDIT:
Zitat:

Zitat von danieldelphi (Beitrag 1293132)
Dann hab ich weiter gesucht und iwo gelesen, dass FastMM keine leaks bezüglich externer Datein findet, ...


p80286 12. Mär 2015 15:47

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von Jasocul (Beitrag 1293189)
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.

Sag ich doch, Chaos!
Das letzte mal, als ich so wilde Dateioperationen durchgeführt habe, war noch kein Delphi existent.

[OT]
@Mavarik glaub ich Dir gerne, aber da die Blockwrite/Blockread-s definitv langsamer waren als das Filestream.Read/write, hab ich alles umgestellt (seit D7/XP) u.U. gibt es da ja noch ein paar Nebensächlichkeiten, die sich auswirken!?)
[/OT]

Gruß
K-H

FaTaLGuiLLoTiNe 12. Mär 2015 16:28

AW: Memory leak durch funktion readln
 
Eine wesentliche Verbesserung des gezeigten Quelltextes würde - wohl auch im Hinblick auf das Thema dieses Threads - in der Verwendung von Ressourcenschutzblöcken bestehen...

Mavarik 12. Mär 2015 22:14

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von p80286 (Beitrag 1293241)
[OT]
@Mavarik glaub ich Dir gerne, aber da die Blockwrite/Blockread-s definitv langsamer waren als das Filestream.Read/write, hab ich alles umgestellt (seit D7/XP) u.U. gibt es da ja noch ein paar Nebensächlichkeiten, die sich auswirken!?)
[/OT]

hmm... Wüste nicht was, aber nix was man nicht mal testen kann... (Dir zu liebe):stupid:

Lesen von 5.291.584 KB - gelesen in Häppchen zu 1.048.576 KB

Versuch 0 : ohne Wertung wegen Windows Cache lesen.

Versuch 1 : Blockread(1405 ms) StreamRead(1408 ms) 1:0
Versuch 2 : Blockread(1414 ms) StreamRead(1404 ms) 1:1
Versuch 3 : Blockread(1411 ms) StreamRead(1408 ms) 1:2
Versuch 4 : Blockread(1416 ms) StreamRead(1407 ms) 1:3
Versuch 5 : Blockread(1406 ms) StreamRead(1409 ms) 2:3
Versuch 6 : Blockread(1421 ms) StreamRead(1423 ms) 3:3
Versuch 7 : Blockread(1423 ms) StreamRead(1417 ms) 3:4
Versuch 8 : Blockread(1407 ms) StreamRead(1411 ms) 4:4
Versuch 9 : Blockread(1408 ms) StreamRead(1410 ms) 5:4

Ätsch Blockread hat mit 5:4 gewonnen...

Gemessen in einer Windows 7/64 VMWare


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 4 von 7   « Erste     234 56     Letzte »    

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