首页 > Windows开发 > 详细

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

时间:2014-01-21 09:51:46      阅读:447      评论:0      收藏:0      [点我收藏+]

描述

为了监控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;
using System.IO;
using System.Threading;

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();

            foreach (Process p in processes)
            {
                //获取每个进程的三个需要显示到窗口中的属性。
                string processId = p.Id.ToString();
                string processName = p.ProcessName;
                string startTime = "";

                //有的进程开始时间无法获取,则设置为其异常信息。
                try
                {
                    startTime = getStartTime(p.StartTime);
                }
                catch (Exception ex)
                {
                    startTime = ex.Message;
                }

                //将三个属性,加入显示列表中。
                ListViewItem item = 
                    new ListViewItem(new string[] { processId, processName,startTime});
                listView1.Items.Add(item);
            }
        }

        /**
         * 将日历型时间转化为字符串型时间,方便显示。
         */
        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)
        {
            //刷新前,清空所有内容。
            listView1.Items.Clear();

            //获取当前所有进程。
            Process[] processes = Process.GetProcesses();
            foreach (Process p in processes)
            {
                //获取每个进程的三个需要显示到窗口中的属性。
                string processId = p.Id.ToString();
                string processName = p.ProcessName;

                //有的进程开始时间无法获取,则设置为其异常信息。
                string startTime = null;
                try
                {
                    startTime = getStartTime(p.StartTime);
                }
                catch (Exception ex)
                {
                    startTime = ex.Message;
                }

                //将三个属性,加入显示列表中。
                ListViewItem item =
                    new ListViewItem(new string[] { processId, processName, startTime });
                listView1.Items.Add(item);
            }

        }

    }
}

窗口效果

bubuko.com,布布扣

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

原文:http://blog.csdn.net/yanghaitaohhh/article/details/18232985

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!