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