![]() |
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! |
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:
eine entsprechende Meldung?
ReportMemoryLeaksOnShutdown := true;
|
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. |
AW: ClientDataset Memoryleak
Zitat:
Zitat:
Ach ja: welche Delphi-Version? |
AW: ClientDataset Memoryleak
Die Delphi-Version steht im ersten Posting: Seattle.
Ich habe ein ähnliches Problem auf ![]() 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. |
AW: ClientDataset Memoryleak
Zitat:
|
AW: ClientDataset Memoryleak
Hallo,
hast du beim externen FastMM4 auch die Inc-Datei entsprechend angepasst? Heiko |
AW: ClientDataset Memoryleak
Ich würde behaupten: Ja.
|
AW: ClientDataset Memoryleak
Zitat:
(*) ...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. |
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. |
AW: ClientDataset Memoryleak
Zitat:
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. |
AW: ClientDataset Memoryleak
MIt dieser Schleife das selbe Problem:
Code:
War wahrscheinlich eh klar.
cdsTestStarted.Last;
while not cdsTestStarted.BOF do cdsTestStarted.Delete; Irgendwann sollte der MemoryManager von Delphi das trotzdem zurückmelden oder? |
AW: ClientDataset Memoryleak
Gebe es eigentlich ein alternative zum Clientdataset? Natürlich mit den gleichen komfort?
|
AW: ClientDataset Memoryleak
Zitat:
|
AW: ClientDataset Memoryleak
Schau mal, ob da was dabei ist:
![]() 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. |
AW: ClientDataset Memoryleak
Zitat:
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. |
AW: ClientDataset Memoryleak
Zitat:
Delphi-Quellcode:
im
ApplyUpdates
Delphi-Quellcode:
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.
TSimpleDateset
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz