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
'C# Winform' 카테고리의 다른 글
C# TIMER 이용한 ALARM (0) | 2021.01.21 |
---|---|
C# TEXT FILE READ, SAVE (텍스트 파일 읽고 TEXTBOX에 넣기) (0) | 2021.01.13 |
C# TIMER 이용해서 타이머 만들기 (0) | 2021.01.12 |
C# EXCEL FILE READ, SAVE (엑셀 읽고 저장하기) (0) | 2021.01.11 |