-
Notifications
You must be signed in to change notification settings - Fork 0
/
SystemInfo.cs
199 lines (152 loc) · 8.91 KB
/
SystemInfo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
using System.Management;
namespace Core_Performance_Monitor
{
internal class SystemInfo
{
// Query information about the processor.
ManagementClass managementClassProcessor = new("Win32_Processor");
// Query information about the cache.
ManagementClass managementClassCacheMemory = new ManagementClass("Win32_CacheMemory");
// Query information about the operating system.
ObjectQuery objectqueryW32OS = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
// Query information about the video card.
ObjectQuery objectQueryW32VC = new ObjectQuery("SELECT * FROM Win32_VideoController");
private const int defaultFrequency = 1000;
public SystemInfo()
{
}
public List<GraphicsInformation> GetGraphicsInformation()
{
using (ManagementObjectCollection mocW32VC = new ManagementObjectSearcher(objectQueryW32VC).Get())
{
List<GraphicsInformation> result = new List<GraphicsInformation>();
foreach (ManagementObject mo in mocW32VC)
{
string GPUInfoVal = (string) mo.Properties["Name"].Value;
string GPUInfoVer = (string) mo.Properties["DriverVersion"].Value;
result.Add(new GraphicsInformation(GPUInfoVal, GPUInfoVer));
}
return result;
}
}
public CacheInformation GetCacheInformation()
{
const ushort CACHE_LEVEL_1 = 1;
const ushort CACHE_LEVEL_2 = 2;
const ushort CACHE_LEVEL_3 = 3;
const ushort CACHE_LEVEL_1_CODE = 3;
const ushort CACHE_LEVEL_2_CODE = 4;
const ushort CACHE_LEVEL_3_CODE = 5;
ManagementObjectCollection mocW32CacheMemory = managementClassCacheMemory.GetInstances();
List<CacheMemory> caches =
[
.. mocW32CacheMemory.Cast<ManagementObject>()
.Where(managementObject => (ushort)managementObject.Properties["Level"].Value == (ushort)CACHE_LEVEL_1_CODE)
.Select(managementObject => new CacheMemory(CACHE_LEVEL_1, (uint)managementObject.Properties["MaxCacheSize"].Value)),
.. mocW32CacheMemory.Cast<ManagementObject>()
.Where(managementObject => (ushort)managementObject.Properties["Level"].Value == (ushort)CACHE_LEVEL_2_CODE)
.Select(managementObject => new CacheMemory(CACHE_LEVEL_2, (uint)managementObject.Properties["MaxCacheSize"].Value)),
.. mocW32CacheMemory.Cast<ManagementObject>()
.Where(managementObject => (ushort)managementObject.Properties["Level"].Value == (ushort)CACHE_LEVEL_3_CODE)
.Select(managementObject => new CacheMemory(CACHE_LEVEL_3, (uint)managementObject.Properties["MaxCacheSize"].Value)),
];
mocW32CacheMemory.Dispose();
return new CacheInformation(
caches.Where(c => c.CacheLevel == CACHE_LEVEL_1).Select(s => s.CacheSize).Sum(size => size),
caches.Where(c => c.CacheLevel == CACHE_LEVEL_2).Select(s => s.CacheSize).Sum(size => size),
caches.Where(c => c.CacheLevel == CACHE_LEVEL_3).Select(s => s.CacheSize).Sum(size => size)
);
}
public MemoryInformation GetMemoryInformation()
{
using (ManagementObjectCollection mocW32OS = new ManagementObjectSearcher(objectqueryW32OS).Get())
{
ulong freeMemory = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["FreePhysicalMemory"]).First().Value;
ulong totalMemory = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["TotalVisibleMemorySize"]).First().Value;
ulong freeVirtualMemory = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["FreeVirtualMemory"]).First().Value;
ulong totalVirtualMemory = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["TotalVirtualMemorySize"]).First().Value;
ulong freeSpacePaging = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["FreeSpaceInPagingFiles"]).First().Value;
ulong sizeStoredPaging = (ulong)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["SizeStoredInPagingFiles"]).First().Value;
return new MemoryInformation(
freeMemory,
totalMemory,
freeVirtualMemory,
totalVirtualMemory,
freeSpacePaging,
sizeStoredPaging
);
}
}
public ProcessorInformation GetProcessorInformation()
{
ManagementObjectCollection mocW32Processor = managementClassProcessor.GetInstances();
var processorType = (string)mocW32Processor.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["Name"]).First().Value;
var physicalCores = (uint)mocW32Processor.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["NumberOfCores"]).First().Value;
var logicalCores = (uint)mocW32Processor.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["NumberOfLogicalProcessors"]).First().Value;
mocW32Processor.Dispose();
return new ProcessorInformation(processorType, physicalCores, logicalCores);
}
public DeviceInformation GetDeviceInformation()
{
ManagementObjectSearcher mosW32OS = new ManagementObjectSearcher(objectqueryW32OS);
ManagementObjectCollection mocW32OS = mosW32OS.Get();
var deviceName = (string) Environment.MachineName;
var operatingSystem = (string)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["Caption"]).First().Value;
var osVersion = (string) Environment.OSVersion.Version.ToString();
mocW32OS.Dispose();
mosW32OS.Dispose();
return new DeviceInformation(deviceName, operatingSystem, osVersion);
}
public ChronoInformation GetChronoInformation()
{
using(ManagementObjectCollection mocW32OS = new ManagementObjectSearcher(objectqueryW32OS).Get())
{
string lastBootUpTime = (string)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["LastBootUpTime"]).First().Value;
string localDateTime = (string)mocW32OS.Cast<ManagementObject>().Select(managementObject => managementObject.Properties["LocalDateTime"]).First().Value;
return new ChronoInformation(ManagementDateTimeConverter.ToDateTime(lastBootUpTime).ToString(), ManagementDateTimeConverter.ToDateTime(localDateTime).ToString(), defaultFrequency);
}
}
public void queryInfo()
{
ManagementObjectCollection mocW32Processor = managementClassProcessor.GetInstances();
// Loop and print out processor information.
foreach (ManagementObject managementObject in mocW32Processor)
{
Console.WriteLine(managementObject.Properties.ToString());
}
// L2CacheSize
// L3CacheSize
// Name
// NumberOfCores
// NumberOfLogicalProcessors
// SystemName
// TheadCount
// CurrentClockSpeed
// Loop and print out cache memory information.
//foreach (ManagementObject managementObject in mocW32CacheMemory)
//{
// Console.WriteLine(managementObject.Properties.ToString());
//}
ManagementObjectSearcher mosW32OS = new ManagementObjectSearcher(objectqueryW32OS);
ManagementObjectCollection mocW32OS = mosW32OS.Get();
// Loop and print out OS information.
foreach (ManagementObject managementObject in mocW32OS)
{
Console.WriteLine(managementObject.Properties.ToString());
}
// BuildNumber
// Caption
// LastBootUpTime
// LocalDateTime
// OSArchitecture
// Version
ManagementObjectSearcher mosW32VC = new ManagementObjectSearcher(objectQueryW32VC);
ManagementObjectCollection mocW32VC = mosW32VC.Get();
// Loop and print out VC information.
foreach (ManagementObject managementObject in mocW32VC)
{
Console.WriteLine(managementObject.Properties.ToString());
}
}
}
}