VB.NET-Tipp 0036: Ermitteln der Arbeitsspeicherauslastung
von Herfried Wagner
Beschreibung
Dieses Beispiel zeigt, wie man über einen Aufruf in das Windows-API Daten zur Arbeitsspeicherauslastung ermitteln kann.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2002/2003 ' Option Strict: An ' Option Explicit: An ' ' Referenzen: ' - System ' ' ############################################################################## ' ################################## Main.vb ################################### ' ############################################################################## Option Explicit On Option Strict On Option Compare Binary Imports Microsoft.VisualBasic Imports System ' <remarks> ' Stellt den Einsprungspunkt der Anwendung bereit. ' </remarks> Public Class Main '''<summary> ''' Der Einsprungspunkt der Anwendung. '''</summary> Public Shared Sub Main() ' Aktualisieren der Speicherstatistik. MemoryStatus.Refresh() ' Ausgeben der Speicherstatistik. Console.WriteLine( _ MemoryStatus.MemoryLoad.ToString() & "% des Speichers belegt") Console.WriteLine() Console.WriteLine("Totaler physischer Speicher: " & _ BytesToMegabytes(MemoryStatus.TotalPhysical).ToString() & " MB") Console.WriteLine("Davon noch frei: " & _ BytesToMegabytes(MemoryStatus.AvaliablePhysical).ToString() & " MB") Console.WriteLine() Console.WriteLine("Bytes in gepageten Dateien: " & _ BytesToMegabytes(MemoryStatus.TotalPageFile).ToString() & " MB") Console.WriteLine("Davon noch frei: " & _ BytesToMegabytes(MemoryStatus.AvailablePageFile).ToString() & " MB") Console.WriteLine() Console.WriteLine("Totaler virtueller Speicher: " & _ BytesToMegabytes(MemoryStatus.TotalVirtual).ToString() & " MB") Console.WriteLine("Davon noch frei: " & _ BytesToMegabytes(MemoryStatus.AvailableVirtual).ToString() & " MB") End Sub '''<summary>Wandelt die in <paramref name="intBytes"/> ''' übergebene Zahl an Bytes in Megabyte um.</summary> '''<returns>Die Anzahl an Megabyte, die <paramref name="intBytes"/> ''' entsprechen.</param> Private Shared Function BytesToMegabytes( _ ByVal intBytes As Integer) As Integer Return intBytes \ 1024 \ 1024 End Function End Class ' ############################################################################## ' ############################## MemoryStatus.vb ############################### ' ############################################################################## Option Explicit On Option Strict On Imports System Imports System.Runtime.InteropServices ' <remarks> ' Stellt Informationen zur Arbeitsspeicherauslastung bereit. ' </remarks> Public Class MemoryStatus Private Declare Sub GlobalMemoryStatus _ Lib "kernel32.dll" ( _ ByRef lpBuffer As MEMORYSTATUS) <StructLayout(LayoutKind.Sequential)> _ Private Structure MEMORYSTATUS Public dwLength As Int32 ' Muss nicht manuell gesetzt werden. Public dwMemoryLoad As Int32 Public dwTotalPhys As Int32 Public dwAvailPhys As Int32 Public dwTotalPageFile As Int32 Public dwAvailPageFile As Int32 Public dwTotalVirtual As Int32 Public dwAvailVirtual As Int32 End Structure Private Shared m_ms As MEMORYSTATUS ' <summary> ' Ermöglicht den Start der gemeinsamen Mitglieder. ' </summary> Shared Sub New() Refresh() End Sub ' <summary> ' Ermittelt die aktuellen Auslastungswerte ' und macht sie in den Eigenschaften verfügbar. ' </summary> Public Shared Sub Refresh() GlobalMemoryStatus(m_ms) End Sub ' <summary> ' Gibt den belegten Anteil des ' Arbeitsspeichers in Byte zurück. ' </summary> ' <value>Anteil an belegtem Arbeitsspeicher in Byte.</value> Public Shared ReadOnly Property MemoryLoad() As Integer Get Return m_ms.dwMemoryLoad End Get End Property ' <summary> ' Gibt die Gesamtgrösse des physischen ' Speichers in Byte zurück. ' </summary> ' <value>Gesamtgrösse des physischen Speichers in Byte.</value> Public Shared ReadOnly Property TotalPhysical() As Integer Get Return m_ms.dwTotalPhys End Get End Property ' <summary> ' Gibt die Grösse des verfügbaren physischen ' Speichers in Byte zurück. ' </summary> ' <value>Grösse des verfügbaren physischen Speichers in Byte.</value> Public Shared ReadOnly Property AvaliablePhysical() As Integer Get Return m_ms.dwAvailPhys End Get End Property ' <summary> ' Gibt die maximal belegbare Grösse an Speicher in Byte zurück. ' </summary> ' <value>Maximal belegbare Grösse an Speicher in Byte.</value> Public Shared ReadOnly Property TotalPageFile() As Integer Get Return m_ms.dwTotalPageFile End Get End Property ' <summary> ' Gibt die noch belegbare Grösse an Speicher in Byte zurück. ' </summary> ' <value>Die noch belegbare Grösse an Speicher in Byte.</value> Public Shared ReadOnly Property AvailablePageFile() As Integer Get Return m_ms.dwAvailPageFile End Get End Property ' <summary> ' Gibt die Gesamtgrösse des freien Speichers ' im Adressraum des Prozesses zurück. ' </summary> ' <value>Gesamtgrösse des freien Speichers im ' Adressraum des Prozesses.</value> Public Shared ReadOnly Property TotalVirtual() As Integer Get Return m_ms.dwTotalVirtual End Get End Property ' <summary> ' Gibt die Gesamtgrösse des verfügbaren Speichers ' im Adressraum des Prozesses zurück. ' </summary> ' <value>Gesamtgrösse des verfügbaren Speichers ' im Adressraum des Prozesses.</value> Public Shared ReadOnly Property AvailableVirtual() As Integer Get Return m_ms.dwAvailVirtual End Get End Property End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Jonas Köritz am 02.01.2007 um 21:05
Geht viel Einfacher!!!!
Der Gesamt Verfügbare Arbeitsspeicher (in Bytes) steht in: My.Computer.Info.TotalPhysicalMemory
Der Freie Arbeitsspeicher(in Bytes) steht in:
My.Computer.Info.AvailablePhysicalMemory