绩效柜台类别名称? (C#)

时间:2010-02-19 19:43:37

标签: c# process msdn performancecounter

我正在尝试在性能计数器中编程到我的C#应用​​程序中,该应用程序启动另一个进程并检查该已启动进程的处理器使用情况。据我了解,性能计数器类要求我分配一个类别名称,一个计数器名称和一个进程名称。我可以很容易地获得进程名称,但是在互联网上是否有某种类型的列表,其中包含我可以分配的所有可能的类别和计数器名称?我试着在MSDN上搜索这样的东西,但我没有找到任何东西。

感谢您的帮助!

4 个答案:

答案 0 :(得分:21)

我想您想知道您可以监控的流程的哪些方面。可以使用过程绩效计数器列表here 不过,您可以使用GetCategories静态方法列出计算机中的所有类别,或者您可以更具体,并为“流程”类别创建PerformanceCategory,并使用GetCounters获取所有计数器的列表可用。 希望这会有所帮助。

答案 1 :(得分:2)

我创建了一个方法来显示CriGoT上面写的内容,这是一个小捷径。

    private static void GetAllCounters(string categoryFilter)
    {
        var categories = PerformanceCounterCategory.GetCategories();
        foreach (var cat in categories)
        {
            if (categoryFilter != null && categoryFilter.Length > 0)
            {
                if (!cat.CategoryName.Contains(categoryFilter)) continue;
            }
            Console.WriteLine("Category {0}", cat.CategoryName);
            try
            {
                var instances = cat.GetInstanceNames();
                if (instances != null && instances.Length > 0)
                {
                    foreach (var instance in instances)
                    {
                        //if (cat.CounterExists(instance))
                        //{
                            foreach (var counter in cat.GetCounters(instance))
                            {
                                Console.WriteLine("\tCounter Name {0} [{1}]", counter.CounterName, instance);
                            }
                        //}
                    }
                }
                else
                {
                    foreach (var counter in cat.GetCounters())
                    {
                        Console.WriteLine("\tCounter Name {0}", counter.CounterName);
                    }
                }
            }
            catch (Exception)
            {
                // NO COUNTERS
            }
        }
        Console.ReadLine();
}

希望得到这个帮助。

答案 2 :(得分:1)

您可以根据需要分配它们。性能监视器将只显示您选择的任何类别以及您为特定需求选择的计数器名称。

CounterCreationDataCollection ccdc = new CounterCreationDataCollection();
ccdc.Add(new CounterCreationData("Counter Title", "Counter Description", PerformanceCounterType.NumberOfItems32));
PerformanceCounterCategory.Create("My Counter Category", "Category Description", PerformanceCounterCategoryType.Unknown, ccdc);

答案 3 :(得分:1)

对于那些想要快速浏览并找到所需计数器的人,这里有一个快速表单,显示三个带有|Categories|Instances|Counters|的列表框和一个在计时器上更新的计数器值。使用过滤器。

enter image description here

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;

namespace CountersListPreview
{
    internal static class CounterPreview
    {
        [STAThread]
        private static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form f = new CountersListPreviewForm();
            Application.Run(f);
        }
    }

    internal class CountersListPreviewForm : Form
    {
        public CountersListPreviewForm()
        {
            InitializeComponent();
        }

        private PerformanceCounterCategory[] allCats;
        private string[] instances;
        private PerformanceCounter[] counters;
        private PerformanceCounter counter;
        private Timer TitleRefreshTimer;

        private void Form1_Load(object sender, EventArgs e)
        {
            allCats = PerformanceCounterCategory.GetCategories();
            listBox1.DataSource = allCats;
            listBox1.DisplayMember = "CategoryName";

            listBox1.SelectedIndexChanged += On_CatChange;
            listBox2.SelectedIndexChanged += On_InstChange;
            listBox3.SelectedIndexChanged += On_CounterChange;

            textBox2.TextChanged += On_CatFilterChanged;
            textBox3.TextChanged += On_InstFilterChanged;
            textBox4.TextChanged += On_CounterFilterChanged;

            TitleRefreshTimer = new Timer();
            TitleRefreshTimer.Tick += On_Timer;
            TitleRefreshTimer.Interval = 500;
            TitleRefreshTimer.Start();
        }

        private void On_Timer(object sender, EventArgs e)
        {
            textBox1.Text = counter != null ? counter.NextValue().ToString() : "";
        }

        // --------------- SELECTION CHANGE ------------------

        private void On_CatChange(object sender, EventArgs e)
        {
            var cat = listBox1.SelectedItem as PerformanceCounterCategory;
            listBox2.DataSource = instances = cat.GetInstanceNames();
        }

        private void On_InstChange(object sender, EventArgs e)
        {
            var cat = listBox1.SelectedItem as PerformanceCounterCategory;
            var inst = listBox2.SelectedItem as string;
            listBox3.DataSource = counters = cat.GetCounters(inst);
            listBox3.DisplayMember = "CounterName";
        }

        private void On_CounterChange(object sender, EventArgs e)
        {
            counter = listBox3.SelectedItem as PerformanceCounter;
            On_Timer(null, null);
        }

        // --------------- FILTERS ------------------

        private void On_CatFilterChanged(object sender, EventArgs e)
        {
            var filter = textBox2.Text;
            listBox1.DataSource = !string.IsNullOrEmpty(filter) 
                ? allCats.Where(cat => cat.CategoryName.ToLower().Contains(filter.ToLower())).ToArray() 
                : allCats;
        }

        private void On_InstFilterChanged(object sender, EventArgs e)
        {
            var filter = textBox3.Text;
            listBox2.DataSource = !string.IsNullOrEmpty(filter) 
                ? instances.Where(inst => inst.ToLower().Contains(filter.ToLower())).ToArray() 
                : instances;
        }

        private void On_CounterFilterChanged(object sender, EventArgs e)
        {
            var filter = textBox4.Text;
            listBox3.DataSource = !string.IsNullOrEmpty(filter) 
                ? counters.Where(c => c.CounterName.ToLower().Contains(filter.ToLower())).ToArray() 
                : counters;
        }

        // --------------- FORM AND LAYOUT ------------------

        private readonly IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && components != null) components.Dispose();
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.listBox2 = new System.Windows.Forms.ListBox();
            this.listBox3 = new System.Windows.Forms.ListBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox3 = new System.Windows.Forms.TextBox();
            this.textBox4 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // listBox1
            // 
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(12, 38);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(351, 524);
            this.listBox1.TabIndex = 3;
            // 
            // listBox2
            // 
            this.listBox2.FormattingEnabled = true;
            this.listBox2.Location = new System.Drawing.Point(369, 38);
            this.listBox2.Name = "listBox2";
            this.listBox2.Size = new System.Drawing.Size(351, 524);
            this.listBox2.TabIndex = 3;
            // 
            // listBox3
            // 
            this.listBox3.FormattingEnabled = true;
            this.listBox3.Location = new System.Drawing.Point(726, 38);
            this.listBox3.Name = "listBox3";
            this.listBox3.Size = new System.Drawing.Size(351, 524);
            this.listBox3.TabIndex = 3;
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(726, 568);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(351, 20);
            this.textBox1.TabIndex = 4;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(606, 571);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(114, 13);
            this.label1.TabIndex = 5;
            this.label1.Text = "Counter Value (500ms)";
            // 
            // textBox2
            // 
            this.textBox2.Location = new System.Drawing.Point(12, 12);
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(351, 20);
            this.textBox2.TabIndex = 4;
            // 
            // textBox3
            // 
            this.textBox3.Location = new System.Drawing.Point(369, 12);
            this.textBox3.Name = "textBox3";
            this.textBox3.Size = new System.Drawing.Size(351, 20);
            this.textBox3.TabIndex = 4;
            // 
            // textBox4
            // 
            this.textBox4.Location = new System.Drawing.Point(726, 12);
            this.textBox4.Name = "textBox4";
            this.textBox4.Size = new System.Drawing.Size(351, 20);
            this.textBox4.TabIndex = 4;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            //this.BackColor = System.Drawing.SystemColors.;
            this.ClientSize = new System.Drawing.Size(1090, 597);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.textBox4);
            this.Controls.Add(this.textBox3);
            this.Controls.Add(this.textBox2);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.listBox3);
            this.Controls.Add(this.listBox2);
            this.Controls.Add(this.listBox1);
            //this.ForeColor = System.Drawing.SystemColors.ControlLightLight;
            this.Name = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();
        }

        #endregion

        private ListBox listBox1;
        private ListBox listBox2;
        private ListBox listBox3;
        private TextBox textBox1;
        private Label label1;
        private TextBox textBox2;
        private TextBox textBox3;
        private TextBox textBox4;
    }
}