static void Main(string[] args) { CustomizedCommandLine(args); ProcessMonitorLib.CPUMonitor cpuMonitor = new ProcessMonitorLib.CPUMonitor(sProcessName, sPID); while (!cpuMonitor.MonitorStop) { cpuMonitor.Update(); } }
static void Main(string[] args) { CustomizedCommandLine(args); Process[] proc = Process.GetProcessesByName("FCAT_VR_Capture"); if (proc.Length > 0) { proc[0].Kill(); proc[0].Close(); } CreatSettingForGPUCapture(); Process gpu_caputure = new Process(); #region GPU Capture Start gpu_caputure.StartInfo.FileName = sGPUCapture; gpu_caputure.Start(); #endregion Process target_process = new Process(); #region Target Process Start target_process.Exited += new EventHandler(Target_process_Exited); target_process.EnableRaisingEvents = true; target_process.StartInfo.FileName = sProcessFile; target_process.Start(); #endregion // 等待10 直到讓就緒 Thread.Sleep(20000); #if WRITE_MODE #region Log File 起始設定 var logFileName = Path.Combine(sLogFile, "cpu_mem.log"); sWriter = new StreamWriter(logFileName); sWriter.AutoFlush = true; //sWriter.Write("CPUElapsedTime\tCPUUsage\tCPUUsageMAX\t"); //sWriter.WriteLine("MemElapsedTime\tMemoryUsage\tMemoryUsageMAX"); sWriter.Write("Time\tCPUUsage\tCPUUsageMAX\t"); sWriter.WriteLine("MemoryUsage\tMemoryUsageMAX"); #endregion #endif // 紀錄 GPU ProcessMonitorLib.CPUMonitor cpu_monitor = new ProcessMonitorLib.CPUMonitor(target_process.ProcessName, target_process.Id); ProcessMonitorLib.MemoryMonitor mem_monitor = new ProcessMonitorLib.MemoryMonitor(target_process.ProcessName, target_process.Id); #region 執行 CPU Memory 監視 cpu_monitor.Interval = sInterval; mem_monitor.Interval = sInterval; Thread t_cpu_monitor = new Thread(cpu_monitor.Watching); Thread t_mem_monitor = new Thread(mem_monitor.Watching); t_cpu_monitor.Start(); t_mem_monitor.Start(); while (!t_cpu_monitor.IsAlive || !t_mem_monitor.IsAlive) { Thread.Sleep(10); } #endregion Tools.PressScrollLock(); sProcessStartTime = DateTime.Now; while (!cpu_monitor.MonitorStop && !mem_monitor.MonitorStop) { double times = (DateTime.Now.Ticks - sProcessStartTime.Ticks) / TimeSpan.TicksPerMillisecond; Console.Write(times.ToString("0.000") + "ms\t" + cpu_monitor.Usage.ToString("0.00") + "\t" + cpu_monitor.UsageMAX.ToString("0.00") + "\t"); Console.WriteLine(mem_monitor.UsageMB.ToString("0.00") + "\t" + mem_monitor.UsageMAXMB.ToString("0.00")); #if WRITE_MODE sWriter.Write(times.ToString() + "ms\t" + cpu_monitor.Usage.ToString() + "\t" + cpu_monitor.UsageMAX.ToString() + "\t"); sWriter.WriteLine(mem_monitor.UsageB.ToString() + "\t" + mem_monitor.UsageMAXB.ToString()); #endif if (DateTime.Now >= sProcessStartTime.AddSeconds(DuringTime)) { break; } Thread.Sleep(sInterval); } // 停止紀錄 GPU Tools.PressScrollLock(); Thread.Sleep(3000); cpu_monitor.RequestStop(); mem_monitor.RequestStop(); t_cpu_monitor.Join(); t_cpu_monitor.Join(); if (!gpu_caputure.HasExited) { gpu_caputure.Kill(); } if (!target_process.HasExited) { target_process.Kill(); } gpu_caputure.Close(); target_process.Close(); Console.WriteLine("Monitor Process Done!!"); #if WRITE_MODE sWriter.Close(); #endif System.Console.ReadLine(); }