Para obtener el total de memoria RAM utilizada en nuestro equipo mediante C# .Net, les comparto la siguiente clase que organice, la cual obtiene la memoria disponible y la memoria total del equipo en el que se ejecuta el código (En megabytes).
public static class MonitorRam
{
[DllImport("psapi.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetPerformanceInfo([Out] out InformacionRendimiento PerformanceInformation, [In] int Size);
/// Estructura que nos sera regresada por el metodo GetPerformanceInfo
[StructLayout(LayoutKind.Sequential)]
public struct InformacionRendimiento
{
public int Size;
public IntPtr CommitTotal;
public IntPtr CommitLimit;
public IntPtr CommitPeak;
public IntPtr PhysicalTotal;
public IntPtr PhysicalAvailable;
public IntPtr SystemCache;
public IntPtr KernelTotal;
public IntPtr KernelPaged;
public IntPtr KernelNonPaged;
public IntPtr PageSize;
public int HandlesCount;
public int ProcessCount;
public int ThreadCount;
}
#region HELPERS
public static Int64 GetRamDisponible()
{
InformacionRendimiento pi = new InformacionRendimiento();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return Convert.ToInt64((pi.PhysicalAvailable.ToInt64() * pi.PageSize.ToInt64() / 1048576));
}
else
{
return -1;
}
}
public static Int64 GetRamTotal()
{
InformacionRendimiento pi = new InformacionRendimiento();
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
{
return Convert.ToInt64((pi.PhysicalTotal.ToInt64() * pi.PageSize.ToInt64() / 1048576));
}
else
{
return -1;
}
}
#endregion
}
Y para obtener la memoria RAM utilizada solo hacemos una resta:
Int64 disponible = MonitorRam.GetRamDisponible();
Int64 total = MonitorRam.GetRamTotal();
//obtenemos la memoria utilizada mediante una resta
Int64 utilizada = total - disponible;
Console.WriteLine("Memoria disponible: " + disponible.ToString());
Console.WriteLine("Memoria utilizada: " + utilizada.ToString());
Console.WriteLine("Total memoria RAM: " + total.ToString());
