Delphi-PRAXiS
Seite 2 von 2     12   

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)

Uwe Raabe 31. Mär 2016 10:56

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Koloss (Beitrag 1334297)
Ob ich eben
cds.First
while not cds.EOF
cds.Delete

oder eben

cds.EmptyDataset

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

Nein, ganz und gar nicht. Bei EmptyDataSet kann das ClientDataSet ganz andere Mechanismen verwenden, als beim Löschen einzelner Sätze (noch dazu von vorne an). Bei jedem Delete werden allenfalls kleine Blöcke freigegeben, während ein EmptyDataSet den gesamten reservierten Puffer auf einmal freigeben kann. Was genau passiert, ist leider tief in den Midas-Sourcen verborgen.

Es ist auch nicht so, daß der vom Taskmanager als verwendet angegebene Speicher nicht doch als freier Speicher vom Memory-Manager verwaltet wird. Erst wenn dieser den Speicher wieder an das Betriebssystem zurückgibt, kann der Taskmanager dieses auch anzeigen.

Koloss 31. Mär 2016 13:43

AW: ClientDataset Memoryleak
 
MIt dieser Schleife das selbe Problem:
Code:
  cdsTestStarted.Last;
  while not cdsTestStarted.BOF do
    cdsTestStarted.Delete;
War wahrscheinlich eh klar.

Irgendwann sollte der MemoryManager von Delphi das trotzdem zurückmelden oder?

Koloss 31. Mär 2016 13:47

AW: ClientDataset Memoryleak
 
Gebe es eigentlich ein alternative zum Clientdataset? Natürlich mit den gleichen komfort?

Uwe Raabe 31. Mär 2016 14:48

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Koloss (Beitrag 1334327)
Gebe es eigentlich ein alternative zum Clientdataset? Natürlich mit den gleichen komfort?

Kommt drauf an, was du genau brauchst.

nahpets 31. Mär 2016 15:16

AW: ClientDataset Memoryleak
 
Schau mal, ob da was dabei ist: http://torry.net/pages.php?id=572

Nutze seit Jahren, wenn ich 'ne "Datenbank" ohne SQL, die nur im Arbeitsspeicher existiert, brauche, die KbmMemTable. Ist leistungsfähig, schnell, die Daten können auch in unterschiedlichen Formaten auf die Platte geschrieben und von dort wieder geladen werden.

Sortieren per Index ist möglich, ebenso Filtern, Locate, FindFirst, FindNext...

Benötigt für große Datenmengen natürlich entsprechend Speicher, mir ist allerdings bisher nicht aufgefallen, dass der Speicherbedarf bei der Nutzung irgendwie zunimmt.

Ist 'n Nachkomme von TDataSet und kann daher mit allen datenbanksensitiven Komponenten genutzt werden.

Bambini 31. Mär 2016 15:40

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1334172)
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?

Das wird mit FastMM4 Memory Leak reporting wird wohl nicht funktionieren.
Sind die ClientDataSets denn nicht in C oder C++ geschrieben und werden über *.dll bzw *.OBJ eingebunden?
Die haben dann ihren eignen Memory Manager und der Delphi MM kann da nix sehen.

ventiseis 31. Mär 2016 19:41

AW: ClientDataset Memoryleak
 
Zitat:

Zitat von Bambini (Beitrag 1334347)
Sind die ClientDataSets denn nicht in C oder C++ geschrieben und werden über *.dll bzw *.OBJ eingebunden? Die haben dann ihren eignen Memory Manager und der Delphi MM kann da nix sehen.

Das könnte auch die sporadisch auftretenden Speicherleaks bei
Delphi-Quellcode:
ApplyUpdates
im
Delphi-Quellcode:
TSimpleDateset
erklären, das ja z.T. auch aus einem Clientdataset besteht. Spannender aber wäre die Frage, warum die "Unknown Bytes" erst unter Seattle angezeigt werden und nicht bereits unter XE3.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.
Seite 2 von 2     12   

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