Conoscere il quantitativo di Memoria nel Sistema

Spesso è necessario controllare costantemente la memoria virtuale disponibile prima di una
operazione, oppure spesso un'applicazione per poter funzionare ha bisogno di una quantità
di memoria minima. La funzione GlobalMemoryStatus delle API fornisce lo stato della memoria attraverso la struttura MEMORYSTATUS i cui campi indicano :

* percentuale di memoria utilizzata in un determinato istante (dwMemoryLoad)
* numero totale di byte di memoria fisica installata (dwTotalPhys)
* numero totale di byte di memoria fisica disponibile (dwAvailPhys)
* dimensione massima in byte che può assumere il file di paginazione (dwTotalPageFile)
* numero di byte disponibili nel file di paginazione (dwAvailPageFile)
* numero totale di byte allocabili nel proprio spazio per indirizzi (dqAvailVirtual)

L'esempio sottostante permette di sapere il numero di MB di RAM installata :

Inserire in un modulo bas:

Option Explicit

Public Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type

Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
Public Const lMega As Long = 1048576#

Public Function Fmt(Cosa As Long) As String
Fmt = Format(Cosa, "#,###0")
End Function

Public Sub MemoryFree(Ms As MEMORYSTATUS)
Ms.dwLength = Len(Ms)
GlobalMemoryStatus Ms
End Sub

Inserire in un Form un CommandButton ed il seguente codice:

Private Sub Command1_Click()
Dim Ms As MEMORYSTATUS

GlobalMemoryStatus Ms
MsgBox "Percentuale di memoria usata: " & Fmt(Ms.dwMemoryLoad) & "%" & vbCrLf & _
"Byte totali memoria fisica: " & Fmt(Ms.dwTotalPhys / lMega) & " Mb" & vbCrLf & _
"Memoria fisica disponibile: " & Fmt(Ms.dwAvailPhys / lMega) & " Mb" & vbCrLf & _
"Dimensione totale file di swap: " & Fmt(Ms.dwTotalPageFile / lMega) & " Mb" & vbCrLf & _
"Memoria disponibile nel file di swap: " & Fmt(Ms.dwAvailPageFile / lMega) & " Mb" & vbCrLf & _
"Memoria virtuale totale: " & Fmt(Ms.dwTotalVirtual / lMega) & " Mb" & vbCrLf & _
"Memoria virtuale disponibile: " & Fmt(Ms.dwAvailVirtual / lMega) & " Mb", vbInformation, "Informazioni sulla memoria"
End Sub

Testato su: Windows 98, Windows Me, Windows 2000 Professional