C# 性能计数器类别名称?(C#)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2299097/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Performance Counter Category Names? (C#)
提问by Waffles
I'm trying to program in a performance counter into my C# application that launches another process and checks the processor usage of that launched process. As I understand it, the performance counter class requires me to assign a category name , a counter name, and a process name. I can get the process name easily enough, but is there a list of some sort on the internet that has all possible category and counter names I can assign? I tried scouring MSDN for something like this, but I didn't find anything.
我正在尝试将性能计数器编程到我的 C# 应用程序中,该应用程序启动另一个进程并检查该启动进程的处理器使用情况。据我了解,性能计数器类要求我分配一个类别名称、一个计数器名称和一个进程名称。我可以很容易地获得进程名称,但是互联网上是否有某种列表,其中包含我可以分配的所有可能的类别和计数器名称?我试着在 MSDN 上搜索类似的东西,但我什么也没找到。
Thanks for all the help!
感谢所有的帮助!
采纳答案by CriGoT
I think you want to know what aspects of the process you can monitor. A list of the Process Performance Counters is available hereNevertheless you can use the GetCategoriesstatic method to list all categories in the machine or you could be more specific and create the PerformanceCategory for the "Process" category and use the GetCountersto get a list of all counters available. Hope this helps.
我想您想知道您可以监控流程的哪些方面。进程性能计数器列表可在此处获得不过,您可以使用GetCategories静态方法列出机器中的所有类别,或者您可以更具体地为“进程”类别创建 PerformanceCategory 并使用GetCounters获取列表所有柜台都可用。希望这可以帮助。
回答by Michael Bray
You can assign them whatever you want. The Performance Monitor will simply show whatever category you choose and whatever counter name you choose for your particular need.
您可以随意分配它们。性能监视器将简单地显示您选择的任何类别以及您为特定需要选择的任何计数器名称。
CounterCreationDataCollection ccdc = new CounterCreationDataCollection();
ccdc.Add(new CounterCreationData("Counter Title", "Counter Description", PerformanceCounterType.NumberOfItems32));
PerformanceCounterCategory.Create("My Counter Category", "Category Description", PerformanceCounterCategoryType.Unknown, ccdc);
回答by antonio
I have created a method that show what CriGoT have writted above, a small shortcut.
我创建了一个方法来显示 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();
}
Hope this help.
希望这有帮助。
回答by n1kk
For those who want to quickly browse and find needed Counter here's a quick Form that displays three list boxes with |Categories|Instances|Counters|
and a Counter Value that is updated on a timer. With filters.
对于那些想要快速浏览并找到所需计数器的人,这里有一个快速表单,它显示三个列表框|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;
}
}