AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenartige Memory Leaks bei QuickReport

Ein Thema von Jack and the Juice · begonnen am 26. Jan 2011 · letzter Beitrag vom 26. Jan 2011
Antwort Antwort
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#1

Eigenartige Memory Leaks bei QuickReport

  Alt 26. Jan 2011, 14:44
Hallo zusammen,

zunächst um das vorweg zu nehmen: ich nutze Delphi 2010 und QuickReport 5.

Ich habe mir auf einem Formular einen QuickReport erstellt, der bei Bedarf in PDF oder in XLS exportiert werden soll. Dies funktioniert mit dem folgenden Quelltext auch optimal:

Delphi-Quellcode:
procedure TForm1.alsXLS1Click(Sender: TObject);
var
ExportFilter : TQRXLSFilter;
begin
if savedialog2.Execute then
try
  try
    ExportFilter := TQRXLSFilter.Create(savedialog2.FileName);
    form5.QuickRep1.ExportToFilter(ExportFilter);
  finally
    ExportFilter.Free;
  end;
except
messagedlg('Es ist ein Fehler beim Exportieren aufgetreten.',mtError,[mbOK],0);
end;
end;
und das gleiche für PDF

Delphi-Quellcode:
procedure TForm1.alsPDF1Click(Sender: TObject);
var
ExportFilter : TQRPDFDocumentFilter;
begin
if savedialog1.Execute then
try
  try
    ExportFilter := TQRPDFDocumentFilter.Create(savedialog1.FileName);
    form5.QuickRep1.ExportToFilter(ExportFilter);
  finally
    ExportFilter.Free;
  end;
except
messagedlg('Es ist ein Fehler beim Exportieren aufgetreten.',mtError,[mbOK],0);
end;
end;
Wie gesagt, die Datei wird erstellt, alles ist lesbar und eigentlich so wie ich es haben möchte. Allerdings bekommen ich durch System.ReportMemoryLeaksOnShutdown:=true; bei Beenden der Anwendung folgende Memory Leaks angezeigt.

Bei PDF-Export "An unexpected Memory Leak has occured. The unexpected small block leaks are: 21-28 bytes: TMBCSEncoding x 1"

Bei XLS-Export "An unexpected Memory Leak has occured. The unexpected small block leaks are: 69-76 bytes: TStringList x 2"

Nach Wegklicken der Fehlermeldung bekomme ich in der Entwicklungsumgebung dann die Windows-Fehlermeldung "Programm funktioniert nicht mehr ...". Wenn ich das Programm jedoch als exe laufen lasse, dann bleibt diese letzte Fehlermeldung aus.

Genauso sieht dies übrigens beim "normalen Druck" des QuickReports aus. Der Report wird gedruckt, in der Entwicklungsumgebung bekommen ich allerdings bei Schließen der Anwendung wieder den "Das Programm funktionier nicht mehr"-Fehler.

Vielleicht hat ja jemand schon ähnliche Probleme gehabt, und kann mir ein wenig weiterhelfen.

Vielen Dank schonmal,

jackandthejuice
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: Eigenartige Memory Leaks bei QuickReport

  Alt 26. Jan 2011, 15:04
Delphi-Quellcode:
ExportFilter := TQRPDFDocumentFilter.Create(savedialog1.FileName);
try
  form5.QuickRep1.ExportToFilter(ExportFilter);
finally
  ExportFilter.Free;
end;
Free im Finally = Create direkt vor dem Try.

Denn passiert im Create ein Fehler, würde die Variable nicht ordnungsgemäß initialisiert und das Free hätte ein Problem.
PS: Tritt im Create eine Exception auf, dann wird von der VCL automatisch Free/Destroy aufgerufen und das grade erzeugte Objekt wieder freigegeben.


http://www.delphipraxis.net/154794-t...en-nutzen.html
http://www.delphipraxis.net/155747-t...chachteln.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#3

AW: Eigenartige Memory Leaks bei QuickReport

  Alt 26. Jan 2011, 15:14
Das bringt leider auch nicht viel. Der Code sind jetzt aus wie folgt, aber dennoch kommt es immer noch zu den altbekannten Memory Leaks.

Delphi-Quellcode:
procedure TForm1.alsXLS1Click(Sender: TObject);
var
ExportFilter : TQRXLSFilter;
begin
if savedialog2.Execute then
  begin
    ExportFilter := TQRXLSFilter.Create(savedialog2.FileName);
    try
      try
        form5.QuickRep1.ExportToFilter(ExportFilter);
      except
      messagedlg('Es ist ein Fehler beim Exportieren aufgetreten.',mtError,[mbOK],0);
      end;
     finally
     ExportFilter.Free;
     end;
  end;
end;
Das Gleiche im Übrigen bei PDF.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eigenartige Memory Leaks bei QuickReport

  Alt 26. Jan 2011, 15:17
Nja, zumindestens liegt es dann nicht mehr an diesem Code und du machst es richtig.

Wenn QuickReport intern ein paar Speicherlecks hat, dann kannst du daran leider nicht viel ändern.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Jack and the Juice

Registriert seit: 15. Jan 2011
Ort: Lübeck
52 Beiträge
 
#5

AW: Eigenartige Memory Leaks bei QuickReport

  Alt 26. Jan 2011, 15:20
Dann nehme ich an, dass ich wohl oder übel damit leben muss (es sei denn ich benutze andere Reports). Eigenartig ist dennoch, dass beispielsweise beim Drucken in der Entwicklungsumgebung der besagte Windows-Fehler auftritt (aber kein Debugger-Fehler), bei Nutzung außerhalb der Entwicklungsumgebung jedoch kein Fehler auftritt.

Scheint dann ja tatsächlich ein Fehler von QuickReport zu sein.

Vielen Dank aber auf jeden Fall!
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:27 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