Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SetDelimitedText Memory Leak ? (https://www.delphipraxis.net/203658-setdelimitedtext-memory-leak.html)

venice2 9. Mär 2020 13:58

AW: SetDelimitedText Memory Leak ?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1459263)
Wenn ich dein Beispiel nehme und selber noch eine Files-Array erstelle (Array of String), bekomme ich keine Memoryleaks. Also muss irgendwas im Beispiel noch fehlen, das wir nicht wissen.

Mein Testcode ohne Memoryleaks. Wenn ich Testeshalber das FreeAndNil rausnehme, habe ich wie erwartet ein Memoryleak.
Delphi-Quellcode:
Im DPR:   ReportMemoryLeaksOnShutdown := True;

procedure TForm1.FormCreate(Sender: TObject);
var
  FileName: string;
  SplitPath: TstringList;
  s: Array of String;
begin
  SetLength(s, 2);
  s[0] := 'c:\asfdsdf\sdf';
  s[1] := 'c:\asfds2df\s2df';

  SplitPath := TStringList.Create;
  try
    SplitPath.StrictDelimiter:= true;
    SplitPath.Delimiter := '\';

    SplitPath.DelimitedText := ExtractFilePath(s[0]);

    SplitPath.DelimitedText := ''; // bringt nichts
    SplitPath.Clear; // auch nichts
  finally
    FreeAndNil(SplitPath);
  end;
end;

So hatte ich es ja auch aber ich habe leaks warum auch immer.

Moombas 9. Mär 2020 14:26

AW: SetDelimitedText Memory Leak ?
 
Dann poste doch mal deinen kompletten code, dann kann man dir sicherlich besser helfen.

himitsu 9. Mär 2020 15:30

AW: SetDelimitedText Memory Leak ?
 
Schade, das wäre eine einfache Erklärung gewesen, da globale Variablen in der DPR erst entladen werden, nachdem der Speichermanager aufgeröumt wurde.

Zitat:

Zitat von venice2 (Beitrag 1459239)
Gebe ich einen normalen String ein so wie die @DieDolly habe ich das problem auch nicht.

"normale" String-Konstanten liegen nicht im Speichermanager. (die werden dierect aus dem Code verlinkt, mit ReferenceCounter = -1)


TStringList nutzt intern ein dynamisches Array mit den Strings der Zeilen,
da hätte ein Fehler schon lange auffallen müssen,
und im Setter des DelimitedText sollten die temporären Strings für das Zerlegen eigentlich auch automatisch aufgeräumt werden.

venice2 9. Mär 2020 16:19

AW: SetDelimitedText Memory Leak ?
 
Ich habe es mit 2 Varianten versucht.
1 mal mit TStringList und einmal von Hand (also eigene Split Funktion)
Bei beiden funktioniert es nicht.
Stehe irgendwie auf dem Schlauch na gut ist halt so.

Seltsam ist nur das ich mit reinen Strings arbeite also keine Konvertierung von PWideChar, WideString oder der gleichen.
Trotzdem :evil:
Zitat:

Dann poste doch mal deinen kompletten code, dann kann man dir sicherlich besser helfen.
Den Quelltext hier zu posten bringt nichts da zu viele externe Funktionen aufgerufen werden die hier so niemand nachvollziehen kann.
Am ende gebe ich alles frei wie schon gezeigt aber die Leaks bleiben bestehen.

hoika 9. Mär 2020 16:38

AW: SetDelimitedText Memory Leak ?
 
Hallo,
dann brauche wir ein compilierfähiges Minimalprojekt, also:
- leeres Projekt anlegen
- eine neue Unit (ohne DFM) anlegen
- deinen Code dort rein und in der DPR aufrufen.

Dann alles in eine Zip-Datei und hier hochladen (ohne die Exe).

venice2 9. Mär 2020 16:42

AW: SetDelimitedText Memory Leak ?
 
Zitat:

Zitat von hoika (Beitrag 1459281)
Hallo,
dann brauche wir ein compilierfähiges Minimalprojekt, also:
- leeres Projekt anlegen
- eine neue Unit (ohne DFM) anlegen
- deinen Code dort rein und in der DPR aufrufen.

Dann alles in eine Zip-Datei und hier hochladen (ohne die Exe).

Danke für das Angebot.
Ich weis das es manchmal nötig ist Quelltexte zur Verfügung zu stellen aber ich sagte schon das bringt nichts ich kann es als Minimal Beispiel nicht auslegen.
Von daher wird mir wohl niemand helfen können muss mich da wohl selber durchbeißen.

himitsu 9. Mär 2020 17:01

AW: SetDelimitedText Memory Leak ?
 
Zitat:

Zitat von venice2 (Beitrag 1459279)
Den Quelltext hier zu posten bringt nichts da zu viele externe Funktionen aufgerufen werden die hier so niemand nachvollziehen kann.

Joar, eine kleine Testanwenndung, mit nur dem Wichtigsten, würde schon reichen. :stupid:

p80286 9. Mär 2020 21:29

AW: SetDelimitedText Memory Leak ?
 
Zitat:

Zitat von venice2 (Beitrag 1459279)
Den Quelltext hier zu posten bringt nichts da zu viele externe Funktionen aufgerufen werden die hier so niemand nachvollziehen kann.
Am ende gebe ich alles frei wie schon gezeigt aber die Leaks bleiben bestehen.

Wenn der bekannte Code keine Fehler produziert, Deiner hingegen schon, woran könnte das dann liegen?

Gruß
K-H

hoika 9. Mär 2020 22:07

AW: SetDelimitedText Memory Leak ?
 
Hallo,
Zitat:

Am ende gebe ich alles frei.
Das sieht halt Delphi anders...

1.
Wenn es kein schleichender "Programm verbraucht immer mehr Speicher"-Fehler ist
-> ignorieren, Windows räumt ja eh auf

2.
Sollte es Punkt 1 sein, hilft hier nur radikal
- alle Aufrufe totlegen
- Programm starten, testen
- ersten Aufruf reinnehmen, testen

usw.

Das mussten wir bei uns schon öfters machen.
Was dann bei "altem, bewährten, war schon immer so Code" rauskaum, poste ich lieber nicht ;)

TurboMagic 9. Mär 2020 22:14

AW: SetDelimitedText Memory Leak ?
 
Ist denn 100% sicher was da leakt?
Evtl. nämlich mal mit der vollen fastMM4 Version den Leakreport durchführen lassen,
denn der kann einem auch zeigen wo der Speicher allokiert wurde.
Evtl. leakt ja was anderes als gedacht.

Wobei ich mich da schon immer fragte, waru7m bei Delphi nicht diese volle Version
dabei ist, wenn die doch auch OpenSOurce ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr.
Seite 2 von 3     12 3      

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