Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ClientDataset Memoryleak (https://www.delphipraxis.net/188713-clientdataset-memoryleak.html)

Koloss 30. Mär 2016 11:52

Datenbank: Clientdataset • Version: Seattle 10 • Zugriff über: cds

ClientDataset Memoryleak
 
Mir sind die Clientdataset Bugs in Delphi 2010 bekannt aber auch in Delphi Seattle 10 gibt es Memoryleaks bei Clientdatasets.

Ich habe LogChanges := False eingestellt und wenn ich einen Datensatz lösche und wieder hinzufüge steigt der Speicher.
Wenn ich aber den Datensatz nur editiere bleibt der Speicher gleich.

Das kann man sehr einfach in einen Timer testen und im Windows Task Manager nachschauen.

Mit Logchanges := True und MergeChangeLog das selbe Problem!

Uwe Raabe 30. Mär 2016 12:09

AW: ClientDataset Memoryleak
 
Das ist jetzt nicht unbedingt ein Memoryleak im eigentlichen Sinne. Der Taskmanager weiß nämlich nichts über den intern vom Delphi Speichermanager verfügbaren Speicher. Kommt denn bei aktiviertem
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := true;
eine entsprechende Meldung?

Koloss 30. Mär 2016 12:22

AW: ClientDataset Memoryleak
 
Liste der Anhänge anzeigen (Anzahl: 1)
Diesen Befehl konnte ich noch gar nicht.

Edit: Auch ohne verursachten Memory leak kommt der gleiche Auszug.

Der Speicher steigt aber kontinuierlich nach oben! Erst mit EmptyDataset ist der Speicher wieder frei.

Uwe Raabe 30. Mär 2016 15:49

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Koloss (Beitrag 1334177)
Edit: Auch ohne verursachten Memory leak kommt der gleiche Auszug.

Dann hat die Applikation noch andere Leaks.

Zitat:

Zitat von Koloss (Beitrag 1334177)
Der Speicher steigt aber kontinuierlich nach oben! Erst mit EmptyDataset ist der Speicher wieder frei.

Dann ist es nicht wirklich ein Leak, der Speicher wird ja kontrolliert wieder freigegeben. Vermutlich ist er auch Delphi-intern als verfügbar markiert. Lediglich Windows merkt davon nichts. Der Hinweis, daß ReportMemoryLeaksOnShutdown kein (zusätzliches) Leak erkennt, ist schonmal ein gutes Zeichen.

Ach ja: welche Delphi-Version?

ventiseis 30. Mär 2016 16:11

AW: ClientDataset Memoryleak
 
Die Delphi-Version steht im ersten Posting: Seattle.

Ich habe ein ähnliches Problem auf StackOverflow beschrieben, aber bisher hat das Internet noch keine Antwort gewusst ;-)

Allerdings bin ich mir nicht sicher, ob es vielleicht auch am internen FastMM liegt, der mit der mit irgendeiner Neuerung nicht zurecht kommt. Verwendet man den FastMM von SourceForge mit FullDebugMode, dann kommt genau keine Meldung mehr.

Uwe Raabe 30. Mär 2016 16:25

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von ventiseis (Beitrag 1334227)
Die Delphi-Version steht im ersten Posting: Seattle.

In der Tat! Schade, daß man das nicht sehen kann, während man antwortet...

hoika 30. Mär 2016 16:31

AW: ClientDataset Memoryleak
 
Hallo,
hast du beim externen FastMM4 auch die Inc-Datei entsprechend angepasst?

Heiko

ventiseis 30. Mär 2016 16:45

AW: ClientDataset Memoryleak
 
Ich würde behaupten: Ja.

sahimba 30. Mär 2016 19:13

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1334217)
Der Hinweis, daß ReportMemoryLeaksOnShutdown kein (zusätzliches) Leak erkennt, ist schonmal ein gutes Zeichen

Nicht unbedingt. Sehr oft, und ich debugge gerade an einem solchen Memoryleak in Datasnap (*), wird der Speicher zwar beim Beenden der Applikation freigegeben so dass ReportMemoryLeaksOnShutdown nichts meldet und doch kann die Anwendung ein Problem mit stetig wachsendem Speicher haben.

(*) ...konkret debugge ich nicht mehr sondern habe das Problem eingegrenzt und, auch in Delphi Seattle, ist da ein böser Hund begraben der schon bei einer HelloWorld-Datasnap-Anwendung auftritt.

Koloss 31. Mär 2016 09:36

AW: ClientDataset Memoryleak
 
Bei mir wird auch der Speicher freigegeben wenn ich das Programm beende.
Auch mit cds.EmptyDataset wird der Speicher freigegegeben, nur eben mit cds.Delete nicht.

Ob ich eben
cds.First
while not cds.EOF
cds.Delete

oder eben

cds.EmptyDataset

schreibe, sollte bei Logchanges = False, das selbe sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
Seite 1 von 2  1 2      

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