CPU usage in .net core (at least on Windows)

2020-08-12 05:58发布

问题:

So PerformanceCounter is gone in dotnet core. I understand it was because it was not Linux-compatible.

This comment here: ( What is the story of Performance Counters for .NET Core? ) seems to suggest that if I was willing to run it only on Windows I could "make use of Windows-specific features", but I don't know how I could integrate that in dotnet core.

The reason I am willing to do this workaround is to keep the dotnet core codebase so I don't have to migrate once there is a cross-platform solution for PerformanceCounter.

So to summarize my question: how can I run the CPU usage in dotnet core when running on Windows?


Other relevant posts that I've found:

  • This solution seems to suggest that Process.GetCurrentProcess() would be enough, which I don't quite understand (PerformanceCounterprovided the full CPU usage for the machine).

  • Looping through all processes (as this other post seem to suggest?) is not feasible (it throws an exception for some processes) and it looks pretty slow as well which is a problem for my use case.

回答1:

As of .NET Core 3.0, the Performance Counter APIs are once again part of the BCL and support Linux too:

  • MS: PerformanceCounters or equivalent are available in NETCore 3.0 and higher

  • MS DevBlog: Diagnostic improvements in net-core 3.0

  • SO: Linux example