Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0036: Ermitteln der Arbeitsspeicherauslastung

 von 

Beschreibung

Dieses Beispiel zeigt, wie man über einen Aufruf in das Windows-API Daten zur Arbeitsspeicherauslastung ermitteln kann.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [2,4 KB]

' 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