zoukankan      html  css  js  c++  java
  • .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, "
    "));
            }
            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

  • 相关阅读:
    SVG 2D入门11
    SVG 2D入门13
    jetty
    jquery 跨域访问问题 转
    js 读取 地址栏参数 转
    油猴 greasemonkey 背景音乐 火狐 chrome 背景音乐
    火狐 about:config
    js javascript 模拟点击 超级链接点击 转
    PostgreSQL的时间/日期函数使用 转
    update 多表
  • 原文地址:https://www.cnblogs.com/kennyliu/p/3718790.html
Copyright © 2011-2022 走看看