Share via


HOW TO:取得裝置記憶體

更新:2007 年 11 月

若要取得裝置的可用記憶體,可使用平台叫用 (Invoke) 來呼叫原生 GlobalMemoryStatusGetSystemMemoryDivision 函式。

範例

這個程式碼範例定義下列作業:

  • Windows Embedded CE 中原生方法的平台叫用宣告。

  • 用以從原生方法傳送和接收的結構。

  • 名為 ShowMemory 的 Managed 方法會顯示可用的記憶體。

Public Structure MEMORYSTATUS
    Public dwLength As UInt32
    Public dwMemoryLoad As UInt32
    Public dwTotalPhys As UInt32
    Public dwAvailPhys As UInt32
    Public dwTotalPageFile As UInt32
    Public dwAvailPageFile As UInt32
    Public dwTotalVirtual As UInt32
    Public dwAvailVirtual As UInt32
End Structure 

Public Declare Function GlobalMemoryStatus Lib "CoreDll.Dll" _
    (ByRef ms As MEMORYSTATUS) As Integer

Public Declare Function GetSystemMemoryDivision Lib "CoreDll.Dll" _
    (ByRef lpdwStorePages As UInt32, _
    ByRef ldpwRamPages As UInt32, _
    ByRef ldpwPageSize As UInt32) As Integer

Public Shared Sub ShowMemory()
    Dim storePages As UInt32
    Dim ramPages As UInt32
    Dim pageSize As UInt32
    Dim res As Integer = _
        GetSystemMemoryDivision(storePages, ramPages, pageSize)

    ' Call the native GlobalMemoryStatus method
    ' with the defined structure.
    Dim memStatus As New MEMORYSTATUS
    GlobalMemoryStatus(memStatus)

  ' Use a StringBuilder for the message box string.
    Dim MemoryInfo As New StringBuilder
    MemoryInfo.Append("Memory Load: " _
        & memStatus.dwMemoryLoad.ToString() & vbCrLf)
    MemoryInfo.Append("Total Physical: " _
        & memStatus.dwTotalPhys.ToString() & vbCrLf)
    MemoryInfo.Append("Avail Physical: " _
        & memStatus.dwAvailPhys.ToString() & vbCrLf)
    MemoryInfo.Append("Total Page File: " _
        & memStatus.dwTotalPageFile.ToString() & vbCrLf)
    MemoryInfo.Append("Avail Page File: " _
        & memStatus.dwAvailPageFile.ToString() & vbCrLf)
    MemoryInfo.Append("Total Virtual: " _
        & memStatus.dwTotalVirtual.ToString() & vbCrLf)
    MemoryInfo.Append("Avail Virtual: " _
        & memStatus.dwAvailVirtual.ToString() & vbCrLf)

    ' Show the available memory.
    MessageBox.Show(MemoryInfo.ToString())  

End Sub 
public struct MEMORYSTATUS
{
    public UInt32 dwLength;
    public UInt32 dwMemoryLoad;
    public UInt32 dwTotalPhys;
    public UInt32 dwAvailPhys;
    public UInt32 dwTotalPageFile;
    public UInt32 dwAvailPageFile;
    public UInt32 dwTotalVirtual;
    public UInt32 dwAvailVirtual;
}

[DllImport("CoreDll.dll")]
public static extern void GlobalMemoryStatus
(
    ref MEMORYSTATUS lpBuffer
);

[DllImport("CoreDll.dll")]
public static extern int GetSystemMemoryDivision
(
    ref UInt32 lpdwStorePages,
    ref UInt32 lpdwRamPages,
    ref UInt32 lpdwPageSize
);

public void ShowMemory()
{
    UInt32 storePages = 0;
    UInt32 ramPages = 0;
    UInt32 pageSize = 0;
    int res = GetSystemMemoryDivision(ref storePages, 
        ref ramPages, ref pageSize);

    // Call the native GlobalMemoryStatus method
    // with the defined structure.
    MEMORYSTATUS memStatus = new MEMORYSTATUS();
    GlobalMemoryStatus(ref memStatus);

    // Use a StringBuilder for the message box string.
    StringBuilder MemoryInfo = new StringBuilder();
    MemoryInfo.Append("Memory Load: " 
        + memStatus.dwMemoryLoad.ToString() + "\n");
    MemoryInfo.Append("Total Physical: " 
        + memStatus.dwTotalPhys.ToString() + "\n");
    MemoryInfo.Append("Avail Physical: " 
        + memStatus.dwAvailPhys.ToString() + "\n");
    MemoryInfo.Append("Total Page File: " 
        + memStatus.dwTotalPageFile.ToString() + "\n");
    MemoryInfo.Append("Avail Page File: " 
        + memStatus.dwAvailPageFile.ToString() + "\n");
    MemoryInfo.Append("Total Virtual: " 
        + memStatus.dwTotalVirtual.ToString() + "\n");
    MemoryInfo.Append("Avail Virtual: " 
        + memStatus.dwAvailVirtual.ToString() + "\n");

    // Show the available memory.
    MessageBox.Show(MemoryInfo.ToString());

}

編譯程式碼

這個範例需要下列命名空間的參考:

請參閱

工作

HOW TO:取得裝置 ID 和名稱

其他資源

.NET Compact Framework 中的互通性