60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Topuino_Client_Windows
|
|
{
|
|
public static class PerformanceInfo
|
|
{
|
|
[DllImport("psapi.dll", SetLastError = true)]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool GetPerformanceInfo([Out] out PerformanceInformation PerformanceInformation, [In] int Size);
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct PerformanceInformation
|
|
{
|
|
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;
|
|
}
|
|
|
|
public static Int64 GetPhysicalAvailableMemoryInMiB()
|
|
{
|
|
PerformanceInformation pi = new PerformanceInformation();
|
|
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
|
|
{
|
|
return Convert.ToInt64((pi.PhysicalAvailable.ToInt64() * pi.PageSize.ToInt64() / 1048576));
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
|
|
public static Int64 GetTotalMemoryInMiB()
|
|
{
|
|
PerformanceInformation pi = new PerformanceInformation();
|
|
if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
|
|
{
|
|
return Convert.ToInt64((pi.PhysicalTotal.ToInt64() * pi.PageSize.ToInt64() / 1048576));
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|