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

Waf*_*les 17 c# msdn process performancecounter

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

感谢您的帮助!

Cri*_*GoT 21

我想你想知道你可以监控的过程的哪些方面.此处提供了过程性能计数器列表 但是您可以使用GetCategories静态方法列出计算机中的所有类别,或者您可以更具体,并为"过程"类别创建PerformanceCategory并使用GetCounters获取列表所有柜台都可用.希望这可以帮助.

  • 这个课程使用起来很混乱!为什么他们不使用枚举而不是由许多复杂字符组成的字符串! (4认同)
  • 我的猜测是,它基于每个产品团队(Windows,IIS等)"拥有"计数器名称的事实,因此他们可以在任何时间点添加/删除/更改任何名称.除此之外,我们都可以创建自己的一组计数器. (2认同)

ant*_*nio 5

我创建了一个方法来显示 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();
}
Run Code Online (Sandbox Code Playgroud)

:-)


n1k*_*1kk 5

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

在此处输入图片说明

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;
    }
}
Run Code Online (Sandbox Code Playgroud)