Seite 1 von 1

MEMORYSTATUSEX oder MEMORYSTATUS ?

Verfasst: 05.10.2013 20:21
von SDL
Hallo alle zusammen.

Ich benutze die API "Memorystatus" und funktioniert bei mir

Code: Alles auswählen

Procedure.s RAM_() ; gibt String zurück
  ;*****************************************************************************
  
  Protected Memory.MEMORYSTATUS ; lokale geschütze Variable vom Typ MEMORYSTATUS
  Protected _ram.s              ; lokale geschützte Stringvariable

  GlobalMemoryStatus_(@Memory)  ; Pointer zu Memory, welche als MEMORYSTATUS declariert wurde
  _ram = Str(Memory\dwTotalPhys/1024/1024)+" MByte Ram"

  ProcedureReturn _ram          ; Rückgabewert
EndProcedure
In der WINAPI von rsbasic wird "MEMORYSTATUSEX" benutzt. Außer das die Strucktur erweitert ist kann ich kein Unterschied feststellen.

Frage, ist den die API "Memorystatus" nur noch ein Relikt aus den alten Tagen? und wird verschwinden?

MfG

Re: MEMORYSTATUSEX oder MEMORYSTATUS ?

Verfasst: 05.10.2013 20:47
von ts-soft
Ich würde lieber die native PB Funktion nutzen:

Code: Alles auswählen

Debug Str(MemoryStatus(#PB_System_TotalPhysical) / 1024 / 1024) + " MByte Ram"
1. Code ist kürzer :mrgreen:
2. Gibt auch auf 64-Bit Systemen mit 32-Bit Compiler korrekte Ergebnisse.
(PS: mit MEMORYSTATUSEX gibt es dieses Problem anscheinend nicht!)
3. Crossplattform.

Re: MEMORYSTATUSEX oder MEMORYSTATUS ?

Verfasst: 05.10.2013 21:23
von SDL
ts-soft hat geschrieben:Ich würde lieber die native PB Funktion nutzen:

Code: Alles auswählen

Debug Str(MemoryStatus(#PB_System_TotalPhysical) / 1024 / 1024) + " MByte Ram"
1. Code ist kürzer :mrgreen:
2. Gibt auch auf 64-Bit Systemen mit 32-Bit Compiler korrekte Ergebnisse.
(PS: mit MEMORYSTATUSEX gibt es dieses Problem anscheinend nicht!)
3. Crossplattform.

Danke für die Antwort.
Der Tip ist beim schreiben eleganter. :mrgreen:

Ich habe beides ausprobiert.
--> WinXP SP3 x86; beide API´s korrekte Werte (3GB RAM)
--> Win7 SP1 x64 ; gleiche Ergebnis (PBx86) (2GB RAM)
Der Punkt 3 ist nicht zu Verachten. :wink:

Also gibt es beim Zusammenspiel 64/32 Bit manchmal falsche Ergebnisse?!

Re: MEMORYSTATUSEX oder MEMORYSTATUS ?

Verfasst: 05.10.2013 21:30
von ts-soft
SDL hat geschrieben:Also gibt es beim Zusammenspiel 64/32 Bit manchmal falsche Ergebnisse?!
Naja, auf meinem Win7 64-Bit kommt mit 64-Bit Compiler das korrekte Ergebenis (4 GB) aber mit
dem 32-Bit Compiler kommt 0 GB!
Das liegt wohl daran, das der Structuremember ein signed Long ist, in dem keine 4 GB passen, das
ergebnis also negativ sein wird.

Die ExVersion nutzt Quads und ist somit Akkurat im Ergebnis, genauso wie die PB-Funktion.

Wenn Du dann noch berücksichtigst, das aktuelle System eher 8 und 16 GB RAM haben, sollte die
alte Strukture wohl ausgedient haben :wink:

Re: MEMORYSTATUSEX oder MEMORYSTATUS ?

Verfasst: 05.10.2013 22:43
von SDL
oh ja :oops: ,da war ja was mit den Bit´s .

Danke!