VB-Tec.de Visual Basic - Technik, FAQ, Tricks, BeispieleHome / System / Windows / Memory Speichernutzung analysieren |
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