.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

.NET(C#):获取进程的内存私有工作集,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。