public static void Monitor() { running = true; UpdateVisitor updateVisitor = new UpdateVisitor(); Computer computer = new Computer(); computer.Open(); while (running) { computer.Accept(updateVisitor); MonitoringInfo currentInfo = new MonitoringInfo(); foreach (IHardware hardware in computer.Hardware) { if (hardware.HardwareType == HardwareType.CPU) { CPU cpu = new CPU(); AddCPUInfo(hardware.Sensors, cpu); currentInfo.CPUs.Add(cpu); } else if (hardware.HardwareType == HardwareType.GpuAti) { GPU gpu = new GPU(); gpu.GPUTempMax = 100; // assume max gpu temp is 100 *C AddGPUInfo(hardware.Sensors, gpu); currentInfo.GPUs.Add(gpu); } else if (hardware.HardwareType == HardwareType.GpuNvidia) { GPU gpu = new GPU(); gpu.GPUTempMax = 100; // assume max gpu temp is 100 *C AddGPUInfo(hardware.Sensors, gpu); currentInfo.GPUs.Add(gpu); } } RAM ram = new RAM(); MEMORYSTATUSEX memoryUsage = new MEMORYSTATUSEX(); if (GlobalMemoryStatusEx(memoryUsage)) { ram.FreeMemory = (int)(memoryUsage.ullAvailPhys / (1024 * 1024)); // in MB ram.TotalMemory = (int)(memoryUsage.ullTotalPhys / (1024 * 1024)); // in MB } currentInfo.RAM = ram; Info = currentInfo; Thread.Sleep(1000); } }
private static void AddCPUInfo(ISensor[] sensors, CPU cpu) { float tjMax = 100; float[] loads = new float[64]; // 64 cores ought to be enough for anybody float[] temps = new float[64]; float[] highTemps = new float[64]; int numberOfLoads = 0; int numberOfTemps = 0; ISensor lastTempSensor = null; // used for finding tjMax foreach (ISensor sensor in sensors) { if (sensor.SensorType == SensorType.Load && sensor.Name.StartsWith("CPU Core")) { loads[sensor.Index - 1] = sensor.Value.Value; numberOfLoads++; } else if (sensor.SensorType == SensorType.Temperature && sensor.Name.StartsWith("CPU Core") // CPU Core for Intel || sensor.Name.StartsWith("Core")) // Core for AMD Phenom { temps[sensor.Index] = sensor.Value.Value; highTemps[sensor.Index] = sensor.Max.Value; numberOfTemps++; lastTempSensor = sensor; } } if (lastTempSensor != null) { foreach (IParameter parameter in lastTempSensor.Parameters) { if (parameter.Name.StartsWith("TjMax")) { tjMax = parameter.Value; } } } cpu.TjMax = tjMax; cpu.CPUTempHighest = highTemps.Take(numberOfTemps).Max(); cpu.CoreLoads = loads.Take(numberOfLoads).ToArray(); cpu.CoreTemps = temps.Take(numberOfTemps).ToArray(); }