• .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

  • 相关阅读:
    游标
    Linq to Sql学习
    在asp.net mvc中使用Uploadify上传文件
    Linq 笔记
    ASP.NET MVC笔记
    转:ASP.NET MVC:窗体身份验证及角色权限管理示例
    PowerDesigner
    asp.net缓存使用总结
    Bash Shell中命令行选项/参数处理
    Javascript parseFloat、parseDouble类型转换,数值加减,四舍五入
  • 原文地址:https://www.cnblogs.com/kennyliu/p/3718790.html
Copyright © 2020-2023  润新知