Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Resource löschen (https://www.delphipraxis.net/208105-resource-loeschen.html)

Amateurprofi 10. Jun 2021 08:47

Resource löschen
 
Ich binde in meine Programme gelegentlich .res Dateien ein, die Daten enthalten, die man normalerweise aus einer Datei einliest.
Beim Start des Programms, genauer im FormCreate der MainForm werden diese Daten dann aus der Resource gelesen und in entsprechenden Datenarrays gespeichert.
Danach wird die Resource nicht nehr benötigt und könnte aus dem Speicher entfernt werden.
Ich habe gesucht und "DeleteResource" gefunden, aber das scheint etwas anderes zu sein.
Frage: Kann man zur Laufzeit eine Resource löschen? (mit dem Ziel den Speicherbedarf des Programms zu senken)

dummzeuch 10. Jun 2021 10:19

AW: Resource löschen
 
Zitat:

Zitat von Amateurprofi (Beitrag 1490925)
Frage: Kann man zur Laufzeit eine Resource löschen? (mit dem Ziel den Speicherbedarf des Programms zu senken)

Ich mag mich täuschen, aber soweit ich weiss, werden Ressourcen nur auf Anforderung in den Speicher geladen. D.h. der Speicherverbrauch ändert sich durch ihr reines Vorhanden sein nicht.

himitsu 10. Jun 2021 14:56

AW: Resource löschen
 
Nein, im Programm-Speicher (virtueller Speicher) sind die immer geladen vorhanden,
aber Windows hat die Möglichkeiten bei solchen Sektionen Ungenutztes (wo länger nicht drauf zugegriffen wurde) zu entladen, aus dem physischen RAM.
Das geht dann auch nicht in die Auslagerungsdatei, da Windows das beim nächsten Zugriff einfach aus der Datei (DLL/EXE/BPL) laden/wiederherstellen kann.


Bei der Verwendung könnte man sich auch das Array sparen und direkt einen Zeiger auf die Ressouce nutzen.



Für dich wäre eventuell eine Ressourcen-DLL das passende, wenn es "viele" Daten sind.
Über LoadLibraryEx+LOAD_LIBRARY_AS_DATAFILE kann man soeine DLL laden (wobei nicht der InitCode der DLL ausgeführt wird) und nach Benutzung dann einfach wieder FreeLibrary.

Amateurprofi 11. Jun 2021 15:09

AW: Resource löschen
 
Zitat:

Zitat von himitsu (Beitrag 1490969)
aber Windows hat die Möglichkeiten bei solchen Sektionen Ungenutztes (wo länger nicht drauf zugegriffen wurde) zu entladen, aus dem physischen RAM.

Weißt du auch wie?

Ich habe nach so etwas wie "FreeResource(ResName:String)" oder "RemoveResource(ResName:String)" gesucht.
Kurz gesagt, ich habe die Winapi.Windows nach "Resource" (und nicht als ganzes Word) durchsucht.
gefunden habe ich "FreeResource" aber auch den Hinweis
Zitat:

[This function is obsolete and is only supported for backward compatibility with 16-bit Windows. For 32-bit Windows applications, it is not necessary to free the resources loaded using LoadResource. If used on 32 or 64-bit Windows systems, this function will return FALSE.]

himitsu 12. Jun 2021 11:20

AW: Resource löschen
 
Das macht Windows von alleine, wenn es mehr Platz im Speicher braucht, für Anderes.

Amateurprofi 12. Jun 2021 11:49

AW: Resource löschen
 
Zitat:

Zitat von himitsu (Beitrag 1491026)
Das macht Windows von alleine, wenn es mehr Platz im Speicher braucht, für Anderes.

Oh, das ist ja mal was Positives


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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