Freien Speicher ermitteln
-
Auf den mit GlobalMemoryStatus(&MemStatus) ermittelten Wert, umgerechnet
auf MB.
-
Und welchen von denen? Hoffentlich nicht "dwAvailPhys", der sagt nämlich gar nichts aus...
-
genau dwAvailPhys.
Welchen sollte ich den da benutzen?
-
Die Frage ist: Was willst Du überhaupt wissen???
-
Ich möchte denn momentan noch verfügbaren Speicher ermitteln, da wie
ich schon erwähnte einige meiner Applicationen den Speicher langsam
aufbrauchen.Das ständig laufende Tool ermittelt einmal pro Sekunde den noch verfügbaren
Speicher und zeigt diesen an.Der angezeigte Wert scheint auch ok zu sein, wenn ich versuche bei nur
noch wenigem Speicher den Borland Builder zu starten kommt die Fehlermeldung
das eine Library nicht mehr geladen werden kann.
-
hermes schrieb:
Ich möchte denn momentan noch verfügbaren Speicher ermitteln, da wie
ich schon erwähnte einige meiner Applicationen den Speicher langsam
aufbrauchen.Dann kümmere Dich doch bitte um den Speicher der einzelnen Applikationen und nicht um den Speicher des OS!!!
Also: "GetProcessMemoryInfo" und hier speziell "PagefileUsage". Das ist das was angibt wie viel Speicher der Prozess braucht. Und wenn es steigt dann hat er ein "Speicherleck".hermes schrieb:
Das ständig laufende Tool ermittelt einmal pro Sekunde den noch verfügbaren Speicher und zeigt diesen an.
Das ist total sinnols... mache es bitte auf Prozess-Ebene, sonst hast Du keine Aussagekräftige Daten!
Also z.B. via "EnumProcesses" und "OpenProcess" und dann die obige Funktion.hermes schrieb:
Der angezeigte Wert scheint auch ok zu sein
Er ist aber nicht aussagekräftig... Du kannst weder sagen, welcher Prozess den Speicher benötigt noch hilft er Dir in irgendeiner Form. Auch steigt der Speicher wieder an, wenn Du alle Fenster minimierst... was ja aber eigentlich an der Speicherauslastung nichts ändert...
-
Danke erstmal für die Tips, werde das ganze mal umsetzen.
Eine Frage noch, wie komme ich an den Handle der Application die ich überwachen
möchte.
-
hermes schrieb:
Eine Frage noch, wie komme ich an den Handle der Application die ich überwachen möchte.
Hab ich doch gesagt

EnumProcesses und OpenProcess...
-
Aus der SDK.
Parameters
dwDesiredAccess
[in] Access to the process object. This access right is checked against the security descriptor for the process. This parameter can be one or more of the process access rights.If the caller has enabled the SeDebugPrivilege privilege, the requested access is granted regardless of the contents of the security descriptor.
bInheritHandle
[in] If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle.
dwProcessId
[in] Identifier of the process to open.Return Values
If the function succeeds, the return value is an open handle to the specified process.
dwProcessId
[in] Identifier of the process to open.Wo bekomme ich den Parameter her?
-
hermes schrieb:
Wo bekomme ich den Parameter her?
Hat er doch gesagt: EnumProcesses.
-
The EnumProcesses function retrieves the process identifier for each process object in the system.
BOOL EnumProcesses(
DWORD* pProcessIds,
DWORD cb,
DWORD* pBytesReturned
);Parameters
pProcessIds
[out] Pointer to an array that receives the list of process identifiers.
cb
[in] Size of the pProcessIds array, in bytes.
pBytesReturned
[out] Number of bytes returned in the pProcessIds array.Verstehe nur "Bahnhof", hast du mal ein kleines Beispiel?
-
Die mit [out] gekennzeichneten Parameter werden von der Funktion mit Werten gefüllt, da mußt du nur den nötigen Speicherplatz bereitstellen.
(und Die MSDN bietet dir sogar ein Beispiel, wie die Funktion genutzt werden kann - lesen bildet ;))
-
Versuche gerade EnumProcesses mit dem Builder.
Linke die lib psapi.lib dazu, es wird aber noch die psapi.dll benötigt.
Diese DLL habe ich mir besorgt, nun kommt allerdings die FehlermeldungDie Datei PSAPI.DLL ist verknüpft mit dem fehlenden NTDLL.DLL .......
Brauche ich die NTDLL.DLL ebenfalls, ich benutze allerdings Win98SE, hier handelt
es sich aber um eine NT DLL.
-
hermes schrieb:
ich benutze allerdings Win98SE,
MSDN Library, Anforderungen von EnumProcesses:
Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.
-
Also auf XP umsteigen, ist das mit ServicePac2 wirklich sicher (Viren,Würmer etc.) oder würdest du 2000 empfehlen.