Rilevare la memoria di un palmare tramite vb.net e C#

In questo articolo vedremo che rilevare la memoria del palmare, sia quella disponibile che quella usata.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Articolo: Smart Device - Rilevare la memoria di un palmare tramite Visual Basic Net e C#.

Tramite l'api GlobalMemoryStatus e GetSystemMemoryDivision possiamo rilevare i dati relativi alla memoria. In particolare, la memoria totale, quella fisica, quella virtuale, il file page, ed altro ancora.

Inseriamo i namespace per la gestione delle api, ed uno per il testo (il testo indicherà le informazioni nella messagebox). Di seguito si riportano tali spazi di nomi.

Vb.Net

Imports System

Imports System.RunTime.InteropServices

Imports System.Text

Imports System.Windows.Forms

C#

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

 

A questo punto dopo aver aggiunto gli opportuni spazi di nomi, si crea una struttura per la gestione dei vari dati informativi sulla memoria. Di seguito si riporta i campi di tale struttura.

Vb.Net

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

 

C#

//Struttura per il rilevamento della memoria (caricata, totale, ecc)

public struct MEMORYSTATUS

{

    public uint dwLength;

    public uint dwMemoryLoad;

    public uint dwTotalPhys;

    public uint dwAvailPhys;

    public uint dwTotalPageFile;

    public uint dwAvailPageFile;

    public uint dwTotalVirtual;

    public uint dwAvailVirtual;

}

A questo punto inseriamo la dichiarazione di api, nella nostra form, come riportato qui di seguito.

Vb.Net

'api per la gestione della memoria

Public Declare Function GlobalMemoryStatus Lib "CoreDll.Dll" _

(ByRef ms As MEMORYSTATUS) As Integer

'api per la gestione della memoria

Public Declare Function GetSystemMemoryDivision Lib "CoreDll.Dll" _

(ByRef lpdwStorePages As UInt32, _

ByRef ldpwRamPages As UInt32, _

ByRef ldpwPageSize As UInt32) As Integer

 

C#.

//api per la gestione della memoria

[System.Runtime.InteropServices.DllImport("CoreDll.Dll")]

public static extern int GlobalMemoryStatus(ref MEMORYSTATUS ms);

//api per la gestione della memoria

[System.Runtime.InteropServices.DllImport("CoreDll.Dll")]

public static extern int GetSystemMemoryDivision(ref uint lpdwStorePages, ref uint ldpwRamPages, ref uint ldpwPageSize);

 

Il programma è quasi completato, non resta che creare una funzione da utilizzare nel form, il quale fa uso della funzione api. In particolare per l'api globalmemoryStatus, viene passata la struttura creata precedentemente. Di seguito si riporta tale funzione.

Vb.Net

Public Shared Sub ShowMemory()

Dim storePages As UInt32

Dim ramPages As UInt32

Dim pageSize As UInt32

Dim Intres As Integer = GetSystemMemoryDivision(storePages, ramPages, pageSize)

 

' tramite l'api globalmemorystatus rilevo la memoria

Dim memStatus As New MEMORYSTATUS

GlobalMemoryStatus(memStatus)

' compongo il testo per il messaggio

Dim StrbMemoryInfo As New StringBuilder

StrbMemoryInfo.Append("Memoria Caricata: " _

& memStatus.dwMemoryLoad.ToString() & vbCrLf)

StrbMemoryInfo.Append("Totale Fisica: " _

& memStatus.dwTotalPhys.ToString() & vbCrLf)

StrbMemoryInfo.Append("Aviata Fisica: " _

& memStatus.dwAvailPhys.ToString() & vbCrLf)

StrbMemoryInfo.Append("Totale Page File: " _

& memStatus.dwTotalPageFile.ToString() & vbCrLf)

StrbMemoryInfo.Append("Avviato Page File: " _

& memStatus.dwAvailPageFile.ToString() & vbCrLf)

StrbMemoryInfo.Append("Totale Virtuale: " _

& memStatus.dwTotalVirtual.ToString() & vbCrLf)

StrbMemoryInfo.Append("Avviata Virtuale: " _

& memStatus.dwAvailVirtual.ToString() & vbCrLf)

 

MsgBox(StrbMemoryInfo.ToString())

End Sub

C#

public void ShowMemory()

{

uint storePages = 0;

uint ramPages = 0;

uint pageSize = 0;

int res = GetSystemMemoryDivision(ref storePages,

ref ramPages, ref pageSize);

// tramite l'api globalmemorystatus rilevo la memoria

MEMORYSTATUS memStatus = new MEMORYSTATUS();

GlobalMemoryStatus(ref memStatus);

// compongo il testo per il messaggio

StringBuilder StbMemoryInfo = new StringBuilder();

StbMemoryInfo.Append("Memoria Caricata: "

+ memStatus.dwMemoryLoad.ToString() + "\n");

StbMemoryInfo.Append("Totale Fisica: "

+ memStatus.dwTotalPhys.ToString() + "\n");

StbMemoryInfo.Append("Avviata Fisica: "

+ memStatus.dwAvailPhys.ToString() + "\n");

StbMemoryInfo.Append("Totale Page File: "

+ memStatus.dwTotalPageFile.ToString() + "\n");

StbMemoryInfo.Append("Avviata Page File: "

+ memStatus.dwAvailPageFile.ToString() + "\n");

StbMemoryInfo.Append("Totale Virtuale: "

+ memStatus.dwTotalVirtual.ToString() + "\n");

StbMemoryInfo.Append("Aviata Virtuale: "

+ memStatus.dwAvailVirtual.ToString() + "\n");

MessageBox.Show(StbMemoryInfo.ToString());

}

 

Dall'evento click di un pulsante, possiamo invocare tale funzione, in questo modo verrà visualizzato a video un messaggio contenente le informazioni alla memoria.

Vb.Net

Private Sub BtnVisualizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnVisualizza.Click

'Per visualizzare la memoria avviare la funzione

ShowMemory()

End Sub

C#

private void btnVisualizza_Click(object sender, EventArgs e)

{

//Per visualizzare la memoria avviare la funzione

ShowMemory();

}

Conclusioni

In questo articolo, si è visto come creare un applicazione per dispositivo mobile, il quale visualizza a video un messaggio relativo alla memoria. Il tutto tramite le api di windows. Le api di windows, posso aiutare di molto lo sviluppo in ambiente mobile.