AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MemoryLeak in Nexus?

MemoryLeak in Nexus?

Ein Thema von haentschman · begonnen am 16. Feb 2017 · letzter Beitrag vom 17. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.287 Beiträge
 
Delphi 12 Athens
 
#1

MemoryLeak in Nexus?

  Alt 16. Feb 2017, 17:24
Datenbank: Nexus • Version: 4 • Zugriff über: Nexus
Hallöle...
Ich hab mal was merkwürdiges hier...:

Beispielkonstrukt:
Delphi-Quellcode:
function DataModule.CreateData: TDataSet;
begin
  Result := TNxQuery.Create(nil);
  Result.SQL.Text := 'Blubb';
  Result.Open;
end;
...
procedure Anwendung.ReadData;
var
  I: Integer;
  Data: TDataSet;
begin
  Data := DataModule.CreateData;
  try
    while not Data.Eof do
    begin
      ...Lesen
    end;
  finally
    Data.Free;
  end;
end;
Ich habe bei allen diesen Konstrukten ein Speicherleck. Habe ich was übersehen? Die Zeile 321 enthällt den Aufruf zu DataModule.CreateData
Oder veräppelt mich der MadExcept?

Danke.
Miniaturansicht angehängter Grafiken
leak.png  

Geändert von haentschman (17. Feb 2017 um 08:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.977 Beiträge
 
Delphi 12 Athens
 
#2

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 08:16
Ist TNexusQuery von dir? Das Original heißt meines Wissens TNxQuery.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.287 Beiträge
 
Delphi 12 Athens
 
#3

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 08:35
Moin Uwe...
Zitat:
Das Original heißt meines Wissens TNxQuery.
...richtig. Die verwende ich auch. Für das Beispiel fand ich das ausreichend.

Nachtrag: Änderung TNxQuery im Beispielkonstrukt.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 08:57
Hallo,

ist das Beispiel vollständig? Ich frag nur, weil du den Constructor der TnxQuery aufrufst, aber freigeben tust du ein TDataSet.

BTW ich verwende die NexusDB schon seit Version 1.14 aber Probleme mit MemoryLeaks hatte ich noch nicht. Thorsten macht hier wirklich einen sehr guten Job
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.287 Beiträge
 
Delphi 12 Athens
 
#5

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:18
Moin...
Zitat:
weil du den Constructor der TnxQuery aufrufst, aber freigeben tust du ein TDataSet.
...TnxQuery stammt von der Hierachie des TDataSet ab. Siehe auch Screenshot: Data.DB ... TDataSet.Open Der Pointer auf die Instanz ist die gleiche. Also ist das Freigeben auch so richtig...

Nachtrag:
Ich denke hier veräppelt mich der MadExcept. Ein Beenden mit ReportMemoryLeaksOnShutdown := True bringt kein Leak bis auf den UnicodeString den ich testweise eingefügt habe.
Miniaturansicht angehängter Grafiken
leak1.png  

Geändert von haentschman (17. Feb 2017 um 09:54 Uhr)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:32
Sehe ich ganz anders. Du erzeugst eine Instanz der TnxQuery, deren Teilmenge von der Objekthierarchie ein TDataSet ist. Das ist richtig, darum funktioniert das auch. Aber bei der Freigabe wird lediglich der Destructor des TDataSet aufgerufen, und NICHT der Destructor der TnxQuery. Das muss leaken, was sonst. Die Speicheradresse ist die selbe, aber...deine Frage war ja "Habe ich was übersehen?".
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#7

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:38
Das dürfte eigentlich kein Problem sein, da der Destruktor immer virtuell ist.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#8

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:43
Aber bei der Freigabe wird lediglich der Destructor des TDataSet aufgerufen, und NICHT der Destructor der TnxQuery.
Das kann ich aber nur glauben, wenn bei dem Destructor von TnxQuery das override vergessen worden wäre. Ansonsten sorgt die Vererbung für den korrekten Aufruf des richtigen Destructors.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.287 Beiträge
 
Delphi 12 Athens
 
#9

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:45
Danke an Alle...
Zitat:
Das dürfte eigentlich kein Problem sein, da der Destruktor immer virtuell ist.
Zitat:
Ansonsten sorgt die Vererbung für den korrekten Aufruf des richtigen Destructors.
...sehe ich auch so.
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.895 Beiträge
 
Delphi 12 Athens
 
#10

AW: MemoryLeak in Nexus?

  Alt 17. Feb 2017, 09:46
https://www.nexusdb.com/Support/index.php?q=id_1871.htm

Wenn das virtuelle Destroy (override) richtig aufräumt sollte es doch OK sein.

Rollo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
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