Kontakt
DSVGO
In manchen Situationen wäre es hilfreich zu wissen, wieviel Speicher das Betriebssystem noch zur Verfügung stellen kann bzw. wie die Speicherausnutzung (in %) gerade aussieht. Windows kennt dafür die API-Routine GlobalMemoryStatus, welche dann auch in den unten gezeigten Funktionen verwendet wird.
Das folgende Beispiel startet eine Anwendung nur dann, falls die Speicherausnutzung weniger als 90% beträgt:
If MemoryStatus.MemoryLoad < 90 Then Shell "c:\test\bigprog.exe" Else MsgBox "Zu wenig Speicher", vbExclamation End If
Die folgende ShowMemory-Proedur zeigt eine kleine Info-Box mit dem aktuellen Speicherzustand (in MegaBytes) an:
Sub ShowMemory() Dim s As String With MemoryStatusMB s = "Realer Speicher:" & vbNewLine & _ Str(.AvailPhys) & " von" & Str(.TotalPhys) & _ " MB verfügbar" & vbNewLine s = s & "Virtueller Speicher: " & vbNewLine & _ Str(.AvailPageFile) & " von" & Str(.TotalPageFile) & _ " MB verfügbar" End With MsgBox s, vbInformation, "Speicherstatus" End Sub
Man beachte, wie durch Nutzung des With-Blocks der mehrfache Aufruf der API-Routine vermieden wird.
In einem Modul müssen die folgende Struktur und API-Funktion deklariert werden. Man beachte, welche Informationen vom System überhaupt geliefert werden:
Public Type typMemoryStatus Length As Long 'Länge der Struktur (32 Bytes) MemoryLoad As Long 'Speicherausnutzung in % (0 bis 100) TotalPhys As Long 'Realer Speicher, insgesamt AvailPhys As Long 'Realer Speicher, verfügbar TotalPageFile As Long 'Auslagerungsdatei, insgesamt AvailPageFile As Long 'Auslagerungsdatei, verfügbar TotalVirtual As Long 'Virtueller Speicher, insgesamt AvailVirtual As Long 'Virtueller Speicher, verfügbar End Type Private Declare Sub GlobalMemoryStatus Lib "kernel32" ( _ lpBuffer As typMemoryStatus)
Die folgenden Funktionen rufen einfach die gerade gezeigte API-Funktion auf und rechnen ggf. in die gewünschte Einheit um:
'Ergebnisse in Bytes: Public Function MemoryStatus() As typMemoryStatus MemoryStatus.Length = Len(MemoryStatus) GlobalMemoryStatus MemoryStatus End Function 'Ergebnisse in KiloBytes: Public Function MemoryStatusKB() As typMemoryStatus MemoryStatusKB.Length = Len(MemoryStatusKB) GlobalMemoryStatus MemoryStatusKB With MemoryStatusKB .AvailPageFile = .AvailPageFile \ 1024 .AvailPhys = .AvailPhys \ 1024 .AvailVirtual = .AvailVirtual \ 1024 .TotalPageFile = .TotalPageFile \ 1024 .TotalPhys = .TotalPhys \ 1024 .TotalVirtual = .TotalVirtual \ 1024 End With End Function 'Ergebnisse in MegaBytes: Public Function MemoryStatusMB() As typMemoryStatus MemoryStatusMB.Length = Len(MemoryStatusMB) GlobalMemoryStatus MemoryStatusMB With MemoryStatusMB .AvailPageFile = .AvailPageFile \ 1048576 .AvailPhys = .AvailPhys \ 1048576 .AvailVirtual = .AvailVirtual \ 1048576 .TotalPageFile = .TotalPageFile \ 1048576 .TotalPhys = .TotalPhys \ 1048576 .TotalVirtual = .TotalVirtual \ 1048576 End With End Function
© Jost Schwider, 26.10.2001-26.10.2001 - http://vb-tec.de/memstat.htm