代码之家  ›  专栏  ›  技术社区  ›  TheCloudlessSky

为什么随着时间的推移,我的应用程序的响应性越来越差?

  •  9
  • TheCloudlessSky  · 技术社区  · 7 年前

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

    反应迟钝的原因是因为提取数据所需的时间 RawValue PerformanceCounter (“工作集-专用”)。过了几天,几乎要花一秒钟的时间才能拿到那本书 原始价值 ,冻结主UI线程。如果我重新启动我的电脑,几天内一切都会很快,直到它慢慢变得不那么灵敏。如果我在没有 代码(它是开源的),它可以立即正常运行。

    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中的性能计数器随着时间的推移而变慢?另一个应用程序可能没有清理它吗?有没有一种方法可以调试哪些应用程序也在查看这个性能计数器?我在Windows10上。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Ami Vaknin    7 年前

    为什么你要把秒表放在一个圈里?

    当您这样做时,内存会随着时间的推移而增加,您需要依靠垃圾收集器来完成这项工作

    推荐文章