欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Windows进程监控工具(1)--Windows下进程获取

程序员文章站 2023-02-19 22:42:19
描述 为了监控windows下进程占用资源(内存、cpu使用率)的情况,在这里使用c#自制一个小工具。比如:在window下,做某种性能测试时,需要监控进程内存和cpu的使用情况;虽然,监控的方法很...

描述

为了监控windows下进程占用资源(内存、cpu使用率)的情况,在这里使用c#自制一个小工具。比如:在window下,做某种性能测试时,需要监控进程内存和cpu的使用情况;虽然,监控的方法很多,一般都只能看到进程占用资源的趋势,无法获取准确的数据,以便比较。比如:监控某进程时,让工具每秒记录一次进程内存和cpu的使用率,监控结束时,将这些数据输出。 这里自制该工具分成三步:windows下进程获取、cpu使用率算法 和 监控数据输出。

获取进程

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using system.diagnostics;

namespace processmonitor
{
    public partial class form1 : form
    {
        /**
         * 初始化窗口。
         */
        public form1()
        {
            initializecomponent();

            //设置listview中的三个列标题。
            listview1.columns.add("processid",80);
            listview1.columns.add("processname", 100);
            listview1.columns.add("starttime", 170);

            //显示矩阵的线条。
            listview1.gridlines = true;

            //显示试图细节。
            listview1.view = view.details;

            //试图的行,可被选中。
            listview1.fullrowselect = true;

            //获取当前所有进程。
            process[] processes = process.getprocesses();
            try
            {
                foreach (process p in processes)
                {
                    //获取每个进程的三个需要显示到窗口中的属性。
                    string processid = p.id.tostring();
                    string processname = p.processname;
                    string starttime = getstarttime(p.starttime);

                    //将三个属性,加入显示列表中。
                    listviewitem item = 
                        new listviewitem(new string[] { processid, processname,starttime});
                    listview1.items.add(item);

                }
            }
            catch (exception ex)
            {
                ex.stacktrace.tostring();
            }

        }

        /**
         * 将日历型时间转化为字符串型时间,方便显示。
         */
        private string getstarttime(datetime datetime)
        {
            string starttime = null;
            string year = datetime.year.tostring();
            string month = datetime.month.tostring();
            string day = datetime.day.tostring();

            string hour = datetime.hour.tostring();
            string minute = datetime.minute.tostring();
            string second = datetime.second.tostring();

            starttime = year + "-" + month + "-" + day + " "
                + hour + ":" + minute + ":" + second;

            return starttime;
        }

        /**
         * 窗口的update按钮,刷新窗口中显示的进程。
         */
        private void button1_click(object sender, eventargs e)
        {
            //获取当前所有进程。
            process[] processes = process.getprocesses();
            try
            {
                foreach (process p in processes)
                {
                    //获取每个进程的三个需要显示到窗口中的属性。
                    string processid = p.id.tostring();
                    string processname = p.processname;
                    string starttime = getstarttime(p.starttime);

                    //将三个属性,加入显示列表中。
                    listviewitem item =
                        new listviewitem(new string[] { processid, processname, starttime });
                    listview1.items.add(item);

                }
            }
            catch (exception ex)
            {
                ex.stacktrace.tostring();
            }

        }

    }
}

窗口效果

Windows进程监控工具(1)--Windows下进程获取