Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Es stehen nicht genügend Resourcen..... (https://www.delphipraxis.net/210544-es-stehen-nicht-genuegend-resourcen.html)

creehawk 10. Mai 2022 15:30

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:
function CreateBase64String(FileName: String): String;
var
  FS: TFileStream;
begin
  FS := TFileStream.Create(FileName, fmOpenRead);
  try
    Result := TIdEncoderMIME.EncodeStream(FS);
  finally
  end;
end;
NEU:
Delphi-Quellcode:
function CreateBase64String(FileName: String): String;
var
  FS: TFileStream;
begin
  FS := TFileStream.Create(FileName, fmOpenRead);
  try
    Result := TIdEncoderMIME.EncodeStream(FS);
  finally
    FS.Free;
  end;
end;
Gesehen? Da habe ich auch mehrfach drüber weggelesen.

Na, vielen Dank für die Hinweise, ich hoffe das war es. Wenn nicht.....

creehawk

Der schöne Günther 10. Mai 2022 16:06

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:

Zitat von creehawk (Beitrag 1505633)
Speicherlecks habe ich mit 2 Tools gesucht, nix zu finden.


Redeemer 10. Mai 2022 18:54

AW: Es stehen nicht genügend Resourcen.....
 
Warum braucht man eigentlich Tools dafür? Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown reicht doch, wobei es bei manchen kleinen Typen manchmal erst ab einer gewissen (kleinen) Zahl so etwas meldet.

Rolf Frei 10. Mai 2022 20:11

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.

venice2 10. Mai 2022 21:21

AW: Es stehen nicht genügend Resourcen.....
 
Zitat:

Zitat von Redeemer (Beitrag 1505677)
Warum braucht man eigentlich Tools dafür? Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown reicht doch, wobei es bei manchen kleinen Typen manchmal erst ab einer gewissen (kleinen) Zahl so etwas meldet.

Es reicht eben nicht.
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.

Rolf Frei 10. Mai 2022 23:22

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.

creehawk 11. Mai 2022 06:29

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:
  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;
Aber was das jetzt mit der Meldung zu tun hat? Mit Base64 hat das allerdings nix zu tun, sind PNG Grafiken.

Kurios.

creehawk

haentschman 11. Mai 2022 06:45

AW: Es stehen nicht genügend Resourcen.....
 
Moin...8-)
[Klugscheiß ON]
Delphi-Quellcode:
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') = true then
..niemals auf True prüfen. :warn:
Delphi-Quellcode:
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') then
...
[Klugscheiß OFF]
:zwinker:

Blup 11. Mai 2022 07:17

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;

creehawk 11. Mai 2022 09:45

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.
Seite 2 von 3     12 3      

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