public SystemMemoryInfo() { var pi = new PERFORMANCE_INFORMATION(); if (NativeMethods.GetPerformanceInfo(out pi, Marshal.SizeOf(pi))) { var pageSize = (long)pi.PageSize; var f = new Func <UIntPtr, long>(p => (long)p * pageSize); CommitTotalPages = f(pi.CommitTotal); CommitLimitPages = f(pi.CommitLimit); CommitPeakPages = f(pi.CommitPeak); PhysicalTotalBytes = f(pi.PhysicalTotal); PhysicalAvailableBytes = f(pi.PhysicalAvailable); PhysicalUsedBytes = PhysicalTotalBytes - PhysicalAvailableBytes; SystemCacheBytes = f(pi.SystemCache); KernelTotalBytes = f(pi.KernelTotal); KernelPagedBytes = f(pi.KernelPaged); KernelNonPagedBytes = f(pi.KernelNonpaged); PageSizeBytes = pageSize; MemoryUsage = Math.Round(((double)PhysicalUsedBytes / PhysicalTotalBytes) * 100); HandlesCount = (int)pi.HandleCount; ProcessCount = (int)pi.ProcessCount; ThreadCount = (int)pi.ThreadCount; } }
public static extern bool GetPerformanceInfo([Out] out PERFORMANCE_INFORMATION pPerformanceInformation, [In] int cb);