[DllImport("psapi.dll", SetLastError=true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS counters, uint size);
Declare Function GetProcessMemoryInfo Lib "psapi.dll" (TODO) As TODO
Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Integer, ByRef ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Integer ) As Integer
[StructLayout(LayoutKind.Sequential, Size=72)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb;
public uint PageFaultCount;
public UInt64 PeakWorkingSetSize;
public UInt64 WorkingSetSize;
public UInt64 QuotaPeakPagedPoolUsage;
public UInt64 QuotaPagedPoolUsage;
public UInt64 QuotaPeakNonPagedPoolUsage;
public UInt64 QuotaNonPagedPoolUsage;
public UInt64 PagefileUsage;
public UInt64 PeakPagefileUsage;
}
//simpler, but 32 bit only
[StructLayout(LayoutKind.Sequential, Size=40)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb;
public uint PageFaultCount;
public int PeakWorkingSetSize;
public int WorkingSetSize;
public int QuotaPeakPagedPoolUsage;
public int QuotaPagedPoolUsage;
public int QuotaPeakNonPagedPoolUsage;
public int QuotaNonPagedPoolUsage;
public int PagefileUsage;
public int PeakPagefileUsage;
}
Do you know one? Please contribute it!
None.
Please add some!
[DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentProcess();
[StructLayout(LayoutKind.Sequential, Size = 40)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb; // The size of the structure, in bytes (DWORD).
public uint PageFaultCount; // The number of page faults (DWORD).
public uint PeakWorkingSetSize; // The peak working set size, in bytes (SIZE_T).
public uint WorkingSetSize; // The current working set size, in bytes (SIZE_T).
public uint QuotaPeakPagedPoolUsage; // The peak paged pool usage, in bytes (SIZE_T).
public uint QuotaPagedPoolUsage; // The current paged pool usage, in bytes (SIZE_T).
public uint QuotaPeakNonPagedPoolUsage; // The peak nonpaged pool usage, in bytes (SIZE_T).
public uint QuotaNonPagedPoolUsage; // The current nonpaged pool usage, in bytes (SIZE_T).
public uint PagefileUsage; // The Commit Charge value in bytes for this process (SIZE_T). Commit Charge is the total amount of memory that the memory manager has committed for a running process.
public uint PeakPagefileUsage; // The peak value in bytes of the Commit Charge during the lifetime of this process (SIZE_T).
}
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS counters, uint size);
// ...
IntPtr currentProcessHandle = GetCurrentProcess();
PROCESS_MEMORY_COUNTERS memoryCounters;
//unsafe
//{
// memoryCounters.cb = (uint) sizeof (PROCESS_MEMORY_COUNTERS);
//}
// Do nor use unsafe here, use Marshal.SizeOf() :-)
memoryCounters.cb = (uint)Marshal.SizeOf(typeof(PROCESS_MEMORY_COUNTERS));
if (GetProcessMemoryInfo(currentProcessHandle, out memoryCounters, memoryCounters.cb))
{
// Work with memoryCounters
// ...
}
// TODO: Throw a dedicated exception
throw new Exception("GetProcessMemoryInfo returned false. Error Code is " +
Marshal.GetLastWin32Error());