【发布时间】:2021-08-09 07:53:54
【问题描述】:
我有一个重复运行的 .NET 6.0 代码来监控机器上的 CPU 并将统计信息发送到仪表板服务器:
var stopwatch = Stopwatch.StartNew();
var processorQuery = new ManagementObjectSearcher().WMIquery("select * from Win32_Processor");
Log(stopwatch.ElapsedMilliseconds); // !!! 2 to 10 seconds!
// now process the results
var processors = new JArray();
foreach (var processorMO in processorQuery) {
var name = processorMO["Name"]?.ToString() ?? "";
var addressWidth = Double.Parse(processorMO["AddressWidth"]?.ToString() ?? "-1");
if (name.IndexOf(addressWidth.ToString()) != -1) name = $"{name} x{addressWidth}";
var maxClockSpeedGHz = Double.Parse(processorMO["MaxClockSpeed"]?.ToString() ?? "-1000") / 1000.0;
if (name.IndexOf(maxClockSpeedGHz.ToString()) != -1) name = $"{name} {maxClockSpeedGHz}GHz";
var numberOfCores = Double.Parse(processorMO["NumberOfCores"]?.ToString() ?? "-1");
name = $"{name} {numberOfCores}cores";
name = name.Replace("CPU ", " ").Replace(" M ", " M").Replace(" @ ", " ");
name = string.Join(" ", name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); // replace multiple spaces with single
int loadPercentage = (int)Double.Parse(processorMO["LoadPercentage"]?.ToString() ?? "-1");
processors.Add(new JObject() { { "Name", name }, { "LoadPercentage", loadPercentage } });
}
我的问题是对WMIquery 的调用非常慢......从 2.5 到 10 秒!
我做错了什么吗?有没有办法更快地获取这些信息?
(PS 还有哪些标签在这里有用?)
【问题讨论】: