Files
ReLibreHardwareMonitor/Hardware/RAM/GenericRAM.cs
T

63 lines
2.6 KiB
C#

// Mozilla Public License 2.0
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors
// All Rights Reserved
using System.Runtime.InteropServices;
using OpenHardwareMonitor.Interop;
namespace OpenHardwareMonitor.Hardware.RAM {
internal class GenericRAM : Hardware {
private Sensor physicalMemoryUsed;
private Sensor physicalMemoryAvailable;
private Sensor physicalMemoryLoad;
private Sensor virtualMemoryUsed;
private Sensor virtualMemoryAvailable;
private Sensor virtualMemoryLoad;
public GenericRAM(string name, ISettings settings)
: base(name, new Identifier("ram"), settings) {
physicalMemoryUsed = new Sensor("Memory Used", 0, SensorType.Data, this, settings);
ActivateSensor(physicalMemoryUsed);
physicalMemoryAvailable = new Sensor("Memory Available", 1, SensorType.Data, this, settings);
ActivateSensor(physicalMemoryAvailable);
physicalMemoryLoad = new Sensor("Memory", 0, SensorType.Load, this, settings);
ActivateSensor(physicalMemoryLoad);
virtualMemoryUsed = new Sensor("Virtual Memory Used", 2, SensorType.Data, this, settings);
ActivateSensor(virtualMemoryUsed);
virtualMemoryAvailable = new Sensor("Virtual Memory Available", 3, SensorType.Data, this, settings);
ActivateSensor(virtualMemoryAvailable);
virtualMemoryLoad = new Sensor("Virtual Memory", 1, SensorType.Load, this, settings);
ActivateSensor(virtualMemoryLoad);
}
public override HardwareType HardwareType {
get {
return HardwareType.RAM;
}
}
public override void Update() {
Kernel32.MEMORYSTATUSEX status = new Kernel32.MEMORYSTATUSEX();
status.dwLength = (uint)Marshal.SizeOf<Kernel32.MEMORYSTATUSEX>();
if (!Kernel32.GlobalMemoryStatusEx(ref status))
return;
physicalMemoryUsed.Value = (float)(status.ullTotalPhys - status.ullAvailPhys) / (1024 * 1024 * 1024);
physicalMemoryAvailable.Value = (float)status.ullAvailPhys / (1024 * 1024 * 1024);
physicalMemoryLoad.Value = 100.0f - (100.0f * status.ullAvailPhys) / status.ullTotalPhys;
virtualMemoryUsed.Value = (float)(status.ullTotalPageFile - status.ullAvailPageFile) / (1024 * 1024 * 1024);
virtualMemoryAvailable.Value = (float)status.ullAvailPageFile / (1024 * 1024 * 1024);
virtualMemoryLoad.Value = 100.0f - (100.0f * status.ullAvailPageFile) / status.ullTotalPageFile;
}
}
}