我試圖實現一個性能監視工具,我想監視基本的東西,如內存和CPU。性能計數器讀訪問非常慢 - 任務管理器如何執行它?
我試圖這樣做,通過使用性能計數器,因爲我相信這是任務管理器在幕後使用的。我不知道任務管理器是如何能夠做到這一點卻因爲對我來說,似乎需要很長的時間使用此方法來檢索進程數據:
class Program
{
static void Main(string[] args)
{
while (true)
{
var pcs = Process.GetProcesses()
.Select(p => new PerformanceCounter("Process", "Working Set - Private", p.ProcessName));
var sw = Stopwatch.StartNew();
foreach (var pc in pcs)
pc.NextValue();
Console.WriteLine($"Time taken to read {pcs.Count()} performance counters: {sw.ElapsedMilliseconds}ms");
Thread.Sleep(1000);
}
}
}
有沒有人有任何建議如何做到這一點,甚至如何甚至任務管理器或進程資源管理器能夠做到這一點?
您是否嘗試在未調試的情況下運行?調試可能會顯着影響LINQ語句的性能。 (只是猜測) –
任務管理器和Process Explorer使用較低級別的語言編寫(最有可能是C++) –
任務管理器不會在更新循環內創建新的PerformanceCounter實例。將它移出並在最後添加一個'.ToList()',我敢打賭你會看到更低的時間。 –