.NET(C#):獲取進程的內存私有工作集


將讀取的數據寫到log.txt文件中,先在工程下新建一個log.txt文件

public class Program
    {
        public const string LOGGER_FILE = "log.txt";
        public static void Logger(string formatString, params object[] args)
        {
            string input = string.Format(formatString, args);
            System.IO.File.AppendAllText(LOGGER_FILE, string.Concat(input, "\r\n"));
        }
        static void Main(string[] args)
        {
            
            string WindowTitle = string.Empty;
            long MemorySize;
            long PagedMemorySize;
            long PeakWorking;
            string ProcessName;
            int pid;
            Process[] ps = Process.GetProcesses();
            foreach (Process p in ps)
            {
                  if (p.MainWindowHandle != null)
                {
                    ProcessName = p.ProcessName;
                    getWorkingSet(ProcessName);


                    //pid = p.Id;
                    //MemorySize = p.NonpagedSystemMemorySize64;
                    ////MachineName =  p.MachineName;
                    //PagedMemorySize = p.PagedMemorySize64;
                    //PeakWorking = p.PeakWorkingSet64;
                    //WindowTitle = p.MainWindowTitle;                   

                    //Logger("時間{0}:MemorySize{1};PagedMemorySize{2};PeakWorking{3};{4};PID:{5}", DateTime.Now, MemorySize.ToString(), PagedMemorySize.ToString(), PeakWorking.ToString(), WindowTitle,pid);

                }
            }
            Console.WriteLine("已完成請查看log.txt,輸入任意鍵退出。");
            Console.ReadKey();



        }

        public static void getWorkingSet(string processName)
        {
            //var processName = "taskmgr";
            using (var process = Process.GetProcessesByName(processName)[0])
            using (var p1 = new PerformanceCounter("Process", "Working Set - Private", processName))
            using (var p2 = new PerformanceCounter("Process", "Working Set", processName))
            {
                Console.WriteLine(process.Id);
                //注意除以CPU數量
                Console.WriteLine("{0}{1:N} KB", "工作集(進程類)", process.WorkingSet64 / 1024);
                Console.WriteLine("{0}{1:N} KB", "工作集 ", process.WorkingSet64 / 1024);
                Console.WriteLine("{0}{1:N} KB", "私有工作集 ", p1.NextValue() / 1024);
                Logger("{0};內存(專用工作集){1:N};PID:{2};程序名:{3}", DateTime.Now, p1.NextValue() / 1024, process.Id.ToString(), processName);

               // Thread.Sleep(1000);
            }
        }
    }

MSDN: http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.pagedmemorysize64.aspx

 

  • 內存 - 工作集:私人工作集中的內存數量與進程正在使用且可以由其他進程共享的內存數量的總和。 
  • 內存 - 峰值工作集:進程所使用的工作集內存的最大數量。 
  • 內存 - 工作集增量:進程所使用的工作集內存中的更改量。 
  • 內存 - 私人工作集:工作集的子集,它專門描述了某個進程正在使用且無法與其他進程共享的內存數量。 
  • 內存 - 提交大小:為某進程使用而保留的虛擬內存的數量。 
  • 內存 - 頁面緩沖池:由內核或驅動程序代表進程分配的可分頁內核內存的數量。可分頁內存是可寫入其他存儲媒體(例如硬盤)的內存。 
  • 內存 - 非頁面緩沖池:由內核或驅動程序代表進程分配的不可分頁的內核內存的數量。不可分頁的內存是不能寫入其他存儲媒體的內存。

來源:“任務管理器”內存列的含義是什么? windows.microsoft.com/z


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM