AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Es stehen nicht genügend Resourcen.....
Thema durchsuchen
Ansicht
Themen-Optionen

Es stehen nicht genügend Resourcen.....

Ein Thema von creehawk · begonnen am 9. Mai 2022 · letzter Beitrag vom 11. Mai 2022
Antwort Antwort
Seite 2 von 3     12 3      
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#11

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

  Alt 10. Mai 2022, 16:30
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

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

  Alt 10. Mai 2022, 17:06
Dann würde ich aber sagen dass deine zwei Tools die du verwendet hast nicht gut sind:

Speicherlecks habe ich mit 2 Tools gesucht, nix zu finden.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.057 Beiträge
 
Delphi 2009 Professional
 
#13

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

  Alt 10. Mai 2022, 19:54
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 10. Mai 2022, 21:11
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.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#15

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

  Alt 10. Mai 2022, 22:21
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.

Geändert von venice2 (10. Mai 2022 um 22:27 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#16

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

  Alt 11. Mai 2022, 00:22
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.
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#17

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

  Alt 11. Mai 2022, 07:29
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

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

  Alt 11. Mai 2022, 07:45
Moin...
[Klugscheiß ON]
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') = true then ..niemals auf True prüfen.
if TDirectory.exists(ModPath + '[ShipEdit] Segelweberei Enbesa') then ...
[Klugscheiß OFF]
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.470 Beiträge
 
Delphi 12 Athens
 
#19

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

  Alt 11. Mai 2022, 08:17
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;

Geändert von Blup (11. Mai 2022 um 10:01 Uhr)
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#20

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

  Alt 11. Mai 2022, 10:45
@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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:18 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