![]() |
AW: Es stehen nicht genügend Resourcen.....
Gefunden. Hoffentlich. Jedenfalls ist der Fehler die letzten 90 Minuten auf mehreren Rechnern nicht mehr aufgetaucht.
Um eine Bitmap umzuwandeln in Base64 verwenden wir IdEncoderMIME (Indy). Schön. Allerdings fehlte in der Funktion eine Kleinigkeit. ALT:
Delphi-Quellcode:
NEU:
function CreateBase64String(FileName: String): String;
var FS: TFileStream; begin FS := TFileStream.Create(FileName, fmOpenRead); try Result := TIdEncoderMIME.EncodeStream(FS); finally end; end;
Delphi-Quellcode:
Gesehen? Da habe ich auch mehrfach drüber weggelesen.
function CreateBase64String(FileName: String): String;
var FS: TFileStream; begin FS := TFileStream.Create(FileName, fmOpenRead); try Result := TIdEncoderMIME.EncodeStream(FS); finally FS.Free; end; end; Na, vielen Dank für die Hinweise, ich hoffe das war es. Wenn nicht..... creehawk |
AW: Es stehen nicht genügend Resourcen.....
Dann würde ich aber sagen dass deine zwei Tools die du verwendet hast nicht gut sind:
Zitat:
|
AW: Es stehen nicht genügend Resourcen.....
Warum braucht man eigentlich Tools dafür?
![]() |
AW: Es stehen nicht genügend Resourcen.....
Ja mit den Bordmittel und ReportMemoryLeaksOnShutdown=True habe ich bisher immer alle Memoryleaks gefunden. Da braucht es keine zusätzlichen Tools. Das hätte auch in diesem Fall zu 100% eine grosse Anzahl nicht freigegebener TFileStreams gemeldet.
|
AW: Es stehen nicht genügend Resourcen.....
Zitat:
![]() Verwende immer ReportMemoryLeaksOnShutdown trotzdem wurde in einen meiner Projekte nicht erkannt das ein Handle nicht freigegeben wurde. Ich konnte aber erkennen das im Task Manager sich die Handles summierten. |
AW: Es stehen nicht genügend Resourcen.....
Ja aber das hat nichts mit Memoryleaks zu tun. Für solche Sachen wie Handles, braucht man schon etwas anderes. Das ist nicht Aufgabe des Memorymanagers.
|
AW: Es stehen nicht genügend Resourcen.....
Moin Moin!
Wie ich oben geschrieben habe passiert jetzt nichts mehr. Ob das jetzt ein MemoryLeak war weiß ich nicht. @redemeer's Hinweis auf ReportMemoryLeaksOnShutdown haben wir natürlich auch verwendet - nix. Als wir allerdings die Base64 Kiste wieder aktiviert haben : nach einer Weile tauchte die Meldung dann wieder auf. Nun haben wir eine Timerfunktion am laufen, die regelmäßig eine Prüfung vornimmt. Base64 dringelassen, Timer rausgenommen. Jetzt kommt die Meldung auch nicht mehr.
Delphi-Quellcode:
Aber was das jetzt mit der Meldung zu tun hat? Mit Base64 hat das allerdings nix zu tun, sind PNG Grafiken.
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') = true then
begin ShipYardForm03.SailClothingEnbesaImage.Picture.Graphic := MainForm.ImageCollection.GetScaledImage(MainForm.ImageCollection.GetIndexByName('ja'),48,48); end else begin ShipYardForm03.SailClothingEnbesaImage.Picture.Graphic := MainForm.ImageCollection.GetScaledImage(MainForm.ImageCollection.GetIndexByName('nein'),48,48); end; Kurios. creehawk |
AW: Es stehen nicht genügend Resourcen.....
Moin...8-)
[Klugscheiß ON]
Delphi-Quellcode:
..niemals auf True prüfen. :warn:
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') = true then
Delphi-Quellcode:
...
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') then
[Klugscheiß OFF] :zwinker: |
AW: Es stehen nicht genügend Resourcen.....
Du hast die Freigabe der skalierten Grafik vergessen.
Wenn ReportMemoryLeaksOnShutdown in deiner Anwendung auf True gesetzt ist, wird dieser Speicherfehler beim Beenden der Anwendung auf jeden Fall gemeldet.
Delphi-Quellcode:
var
sImage: string; lImage: TWICImage; begin if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') then sImage := 'ja' else sImage := 'nein'; {gibt ein Image der Collection zurück, für die Freigabe ist die Collection verantwortlich} lImage := MainForm.ImageCollection.GetIndexByName(sImage); {erzeugt ein neues Image der gewünschten Größe, für die Freigabe ist man selbst verantwortlich!} lImage := MainForm.ImageCollection.GetScaledImage(lImage, 48, 48); try {ezeugt intern eine Kopie des Image per Assign()} ShipYardForm03.SailClothingEnbesaImage.Picture.Graphic := lImage; fianlly lImage.Free; end; |
AW: Es stehen nicht genügend Resourcen.....
@haentschman
Okay. Wo finde ich die Erklärung warum nicht? Für mich war des jetzt logisch so abzufragen. Und das mache ich anderweitig auch. Gilt das für alle Elemente? @Blup Okay, wusste ich jetzt so nicht.... Danke, wird getestet. creehawk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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