The*_*Sky 12 .net c# performance performancecounter
我正在调试一个几天后几乎没有响应的C#应用程序.应用程序每秒计算内存/ CPU使用率,并将其显示在主UI的页脚中.
无响应的原因是因为获取RawValuea PerformanceCounter("工作集 - 私有")所花费的时间.几天之后,需要几乎一秒的时间来获取RawValue,冻结主UI线程.如果我重新启动计算机,一切都会再次快速运行几天,直到它慢慢变得不那么敏感.如果我在没有PerformanceCounter代码(它的开源)的情况下重新编译这个应用程序,它会立即正常运行.
要排除它是应用程序,这里有一些示例代码完全相同:
static void Main(string[] args)
{
using (var memoryWorkingSetCounter = new PerformanceCounter("Process", "Working Set - Private", Process.GetCurrentProcess().ProcessName, true))
{
while (!Console.KeyAvailable)
{
var memoryWorkingSetSw = new Stopwatch();
memoryWorkingSetSw.Start();
var memoryWorkingSetValue = memoryWorkingSetCounter.RawValue;
memoryWorkingSetSw.Stop();
Console.WriteLine(memoryWorkingSetValue.ToString());
Console.WriteLine(memoryWorkingSetSw.Elapsed.ToString());
Thread.Sleep(TimeSpan.FromSeconds(1));
}
}
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
我让它运行了大约2.5天,并Elapsed以毫秒为单位绘制了时间:
什么可能导致Windows中的性能计数器随着时间的推移变得缓慢?另一个应用程序可能不清理它?有没有办法调试哪些应用程序也在查看此性能计数器?我在Windows 10上.