¿Cómo obtener el total de memoria RAM utilizada en el sistema operativo con C# .Net?

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());

Autor: Héctor de León

Desarrollador de software, lector compulsivo.