13
votes

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
We have ported the perf counter stuff from 4.7 to dotnet standard and we have made a start on a linux version too (in a branch)... it works well for our use case (primarily Windows at the moment) - github.com/Polystream/System.Diagnostics.PerformanceCountersScott Perham
@ScottPerham This is great! Thank you very much, it will be very useful.Xavier Peña
Is there any reason not to use the official Microsoft.Windows.Compatibility package? nuget.org/packages/Microsoft.Windows.Compatibilityjamespconnor

1 Answers

2
votes