Найти процесс, который жрет больше памяти - C#
Формулировка задачи:
При помощи вроде что-то записывает, но что и как с этим работать я хз(((((((((((
CreateToolhelp32Snapshot
Немогу разобраться что передавать в параметрах + методичка для obj паскаля Буду рад любой помощи, но прошу помочь кодом Пока есть вот это:[DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid);
[DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern bool Process32First([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
[DllImport("kernel32", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern bool Process32Next([In]IntPtr hSnapshot, ref PROCESSENTRY32 lppe);
IntPtr handle;
static void Main(string[] args)
{
handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Console.ReadLine();Решение задачи: «Найти процесс, который жрет больше памяти»
textual
Листинг программы
static void Main()
{
long maxMemory = 0;
IntPtr handleToSnapshot = IntPtr.Zero;
string procName = string.Empty;
try
{
PROCESSENTRY32 procEntry = new PROCESSENTRY32();
procEntry.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
handleToSnapshot = CreateToolhelp32Snapshot((uint)SnapshotFlags.Process, 0);
if (Process32First(handleToSnapshot, ref procEntry))
{
do
{
Process pr = Process.GetProcessById((int)procEntry.th32ProcessID);
// Console.WriteLine("Proc.name: {0} physical memory usage: {1}", pr.ProcessName, pr.WorkingSet64);
if (pr.WorkingSet64 > maxMemory)
{
maxMemory = pr.WorkingSet64;
procName = pr.ProcessName;
}
}while (Process32Next(handleToSnapshot, ref procEntry));
Console.WriteLine("Proc.name: {0}, Physical memory usage: {1}", procName, maxMemory );
}
else
{
throw new ApplicationException(string.Format("Failed with win32 error code {0}", Marshal.GetLastWin32Error()));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
CloseHandle(handleToSnapshot);
}
Console.ReadKey(true);
}