Delphi-PRAXiS
Seite 3 von 7     123 45     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)

Mavarik 12. Mär 2015 10:55

AW: Memory leak durch funktion readln
 
Hast Du das mal mit {$R+,O+} compiliert?

baumina 12. Mär 2015 10:57

AW: Memory leak durch funktion readln
 
Vielleicht hilft ja auch das hier weiter SJ MMF File Reader - Schneller Textdatei Reader

danieldelphi 12. Mär 2015 10:59

AW: Memory leak durch funktion readln
 
Liste der Anhänge anzeigen (Anzahl: 3)
Anhang 42695

Anhang 42696

Anhang 42697
Zitat:

Zitat von mm1256 (Beitrag 1293155)
Zitat:

Zitat von danieldelphi (Beitrag 1293149)
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;

naja das ist einfach dafür da, dass abgebrochen wird, wenn eine leere zeile dabei ist. also ich habe den code soweit runter gbrochen wie es geht, also oben mal als anhang und der arbeitsspeicher wächst.

danieldelphi 12. Mär 2015 10:59

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von Mavarik (Beitrag 1293156)
Hast Du das mal mit {$R+,O+} compiliert?

nein hab ich nicht, was tut das?

danieldelphi 12. Mär 2015 11:01

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von baumina (Beitrag 1293157)
Vielleicht hilft ja auch das hier weiter SJ MMF File Reader - Schneller Textdatei Reader

danke das versuch ich mal, aber ich glaub dass das nicht ganz dem entspricht was ich brauche.

Mavarik 12. Mär 2015 11:09

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von danieldelphi (Beitrag 1293158)
Delphi-Quellcode:
//BG2010: Wenn Zeile mit Hochkomma beginnt, dann Einlesevorgang abbrechen...
      if zeile[0] = '''' then break;

Also Zeile[0] ist, wenn Du nicht gerade auf iOS oder Andoid bist das Längenbyte!

und R+ O+ kannst Du auch unter Compiler einstellen...
Bereichsüberprüfung und Überlauf...

Mavarik

mm1256 12. Mär 2015 11:11

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von danieldelphi (Beitrag 1293153)
Zitat:

Zitat von Mavarik (Beitrag 1293150)
Zitat:

Zitat von danieldelphi (Beitrag 1293142)
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

p80286 12. Mär 2015 11:36

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

Mavarik 12. Mär 2015 11:44

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von p80286 (Beitrag 1293174)
@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

danieldelphi 12. Mär 2015 12:00

AW: Memory leak durch funktion readln
 
Zitat:

Zitat von mm1256 (Beitrag 1293166)
Zitat:

Zitat von danieldelphi (Beitrag 1293153)
Zitat:

Zitat von Mavarik (Beitrag 1293150)
Zitat:

Zitat von danieldelphi (Beitrag 1293142)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.
Seite 3 von 7     123 45     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