| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1803 人关注过本帖, 1 人收藏
标题:VS2005下PerformanceCounter的使用
只看楼主 加入收藏
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:2 
VS2005下PerformanceCounter的使用
如题,最近在研究这个,遇到几个问题,希望大家能帮帮我!
程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace Sample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int[] count = new int[13];
        private int flag = 1;

        private void RefData()  //每一秒更新一次
        {
            PerformanceCounter pc;

            pc = new PerformanceCounter("Process", "Handle Count", "_Total");  //句柄
            count[0] = Convert.ToInt32(pc.NextValue());

            pc = new PerformanceCounter("Process", "Thread Count", "_Total");  //线程
            count[1] = Convert.ToInt32(pc.NextValue());

            Process[] p = Process.GetProcesses();  //进程
            count[2] = p.Length;

            pc = new PerformanceCounter("Memory", "Available KBytes");  //可用物理内存
            count[4] = Convert.ToInt32(pc.NextValue());

            pc = new PerformanceCounter("Memory", "Cache Bytes");  //获取系统缓存,这里不对,谁知道这里应该怎么写?
            count[5] = Convert.ToInt32(pc.NextValue() / 1024);

            pc = new PerformanceCounter("Memory", "Committed Bytes");  //使用中的物理内存
            count[6] = Convert.ToInt32(pc.NextValue() / 1024);

            pc = new PerformanceCounter("Memory", "Pool Paged Bytes");  //核心内存分页
            count[10] = Convert.ToInt32(pc.NextValue() / 1024);

            pc = new PerformanceCounter("Memory", "Pool Nonpaged Bytes"); //核心内存未分页
            count[11] = Convert.ToInt32(pc.NextValue() / 1024);

            count[9] = count[10] + count[11];  //核心内存总数,为分页和未分页核心内存的和

            if (flag == 1)
            {
                count[3] = count[4] + count[6];  //一次性统计物理内存总数,这里是使用的物理内存和没有使用中的物理内存之和,有点偏差,请问如何改?就是如何获取物理内存总量!

                pc = new PerformanceCounter("Memory", "Commit Limit");  //一次性统计最大物理内存使用量
                count[7] = Convert.ToInt32(pc.NextValue() / 1024);

                count[8] = count[6];

                flag = 0;
            }
            else
            {
                pc = new PerformanceCounter("Memory", "Committed Bytes");   //获取内存使用最大值,与前次比较
                int i = Convert.ToInt32(pc.NextValue() / 1024);
                if (i > count[8])
                {
                    count[8] = i;
                }
            }

            pc = new PerformanceCounter("Process", "Page File Bytes", "_Total");  //页面文件使用量
            count[12] = Convert.ToInt32(pc.NextValue() / 1024);
        }

        private void Form1_Load(object sender, EventArgs e)
        {          
            label4.Text = "";
            label5.Text = "";
            label6.Text = "";

            label10.Text = "";
            label11.Text = "";
            label12.Text = "";

            label16.Text = "";
            label17.Text = "";
            label18.Text = "";

            label22.Text = "";
            label23.Text = "";
            label24.Text = "";

            label25.Text = "";
            label30.Text = "";

            progressBar1.Value = 0;

            timer1.Interval = 1000;
            timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            RefData();

            label4.Text = count[0].ToString();
            label5.Text = count[1].ToString();
            label6.Text = count[2].ToString();

            label10.Text = count[3].ToString();
            label11.Text = count[4].ToString();
            label12.Text = count[5].ToString();

            label16.Text = count[6].ToString();
            label17.Text = count[7].ToString();
            label18.Text = count[8].ToString();

            label22.Text = count[9].ToString();
            label23.Text = count[10].ToString();
            label24.Text = count[11].ToString();

            label25.Text = (count[12] / 1024).ToString() + "MB";

            progressBar1.Value = Convert.ToInt32(count[12] / 1024.0 / 2048.0 * 100);

            label30.Text = label25.Text + "/2048MB";
        }
    }
}
/*CPU使用率的问题:
PerformanceCounter("Process","% Processor Time","_Total");
PerformanceCounter("Processor","% Processor Time","_Total");
上面两句来得到的CPU使用率时时为0,为何?(XP SP3系统,难道是不支持?)请问应该怎么写?还是有其他间接的方法?
****************/

搜索更多相关主题的帖子: color 
2011-05-17 07:08
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
看来真没有人知道了?算了,自己搞,收回分吧!

   唯实惟新 至诚致志
2011-05-18 19:26
sj07210213
Rank: 1
来 自:河南
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-10-16
收藏
得分:0 
很不错!赞一个!!!
2013-10-16 20:34
快速回复:VS2005下PerformanceCounter的使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023796 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved