Найти процесс, который жрет больше памяти - 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);
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы