CPU & MEMORY 사용량
private void btn_process_Click(object sender, EventArgs e)
{
//timer 추가 하여 1초마다 update
timer1.Interval = 1000;
timer1.Start();
GetProcess();
}
public void GetProcess()
{
//Process 정보
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process");
//DataTable 생성
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(object));
table.Columns.Add("CPU(%)", typeof(double));
table.Columns.Add("Memory(M)", typeof(double));
table.Columns.Add("ProcessID", typeof(object));
table.Columns.Add("Handles", typeof(object));
table.Columns.Add("Threads", typeof(object));
//CPU 개수
int cpusn = Environment.ProcessorCount;
try
{
foreach (ManagementObject queryObj in searcher.Get())
{
//CPU - dataGridView에서 정렬 가능하도록
var name = queryObj.GetPropertyValue("Name");
string cputemp = queryObj.GetPropertyValue("PercentProcessorTime").ToString();
double cpu = double.Parse(cputemp) / cpusn;
cputemp = string.Format("{0:N2}", cpu);
cpu = double.Parse(cputemp);
//memory - dataGridView에서 정렬 가능하도록
string memorytemp = queryObj.GetPropertyValue("WorkingSetPrivate").ToString();
double memory = double.Parse(memorytemp) / 1024 / 1024;
memorytemp = string.Format("{0:N2}", memory);
memory = double.Parse(memorytemp);
var process = queryObj.GetPropertyValue("IDProcess");
var handle = queryObj.GetPropertyValue("HandleCount");
var thread = queryObj.GetPropertyValue("ThreadCount");
table.Rows.Add(name, cpu, memory, process, handle, thread);
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.ToString());
}
//cpu 기준으로 정렬
table.DefaultView.Sort = "CPU(%) DESC";
//dataGridView에 입력
dataGridView1.DataSource = table;
try
{
//txt 저장
StreamWriter SW;
SW = File.CreateText(@"d:\temp\test.txt");
foreach (ManagementObject queryObj in searcher.Get())
{
SW.Write("Name: {0} ", queryObj["Name"]);
SW.Write("ProcessID: {0} ", queryObj["IDProcess"]);
SW.Write("Handles: {0} ", queryObj["HandleCount"]);
SW.Write("Threads: {0} ", queryObj["ThreadCount"]);
SW.Write("Memory: {0} ", queryObj["WorkingSetPrivate"]);
SW.WriteLine("CPU%: {0}", queryObj["PercentProcessorTime"]);
}
SW.Close();
}
catch (Exception ex)
{
//MessageBox.Show(ex.ToString());
}
}
//timer 이용하여 강제 버튼 크릭 (1초마다 update)
private void timer1_Tick(object sender, EventArgs e)
{
btn_process.PerformClick();
}
참고 : https://duongame.tistory.com/356