为什么我的应用程序随着时间的推

问题描述 投票:12回答:1

我正在调试一个几天后几乎没有响应的C#应用​​程序。应用程序每秒计算内存/ CPU使用率,并将其显示在主UI的页脚中。

无反应的原因是因为需要时间来获取RawValue(“工作集 - 私人”)的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();
}

我把这个运行了大约2.5天,并以毫秒为单位绘制了Elapsed时间:

graph

什么可能导致Windows中的性能计数器随着时间的推移变得缓慢?另一个应用程序可能不清理它?有没有办法调试哪些应用程序也在查看此性能计数器?我在Windows 10上。

c# .net performance performancecounter
1个回答
0
投票

你为什么在循环中声明秒表?删除循环内可能的任何新声明。

当你这样做时,内存正在增加加班,你依靠垃圾收集器来完成工作

© www.soinside.com 2019 - 2024. All rights reserved.