@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: Reads a process memory usage !!!!C# Signature: [DllImport("psapi.dll", SetLastError=true)] static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS counters, uint size); !!!!VB Signature: 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 !!!!User-Defined Types: [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; } !!!!Alternative Managed API: Do you know one? Please contribute it! !!!!Notes: None. !!!!Tips & Tricks: Please add some! !!!!Sample Code: [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());
Edit psapi.GetProcessM...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.