【问题标题】:Application Slowing Down应用程序变慢
【发布时间】:2013-03-24 07:17:42
【问题描述】:

用 C# (Forms) 编写的应用程序在一段时间后会变慢(尤其是从睡眠模式唤醒后,也可能在 30 分钟后)。

应用程序具有以下结构:

按下按钮 1 或按钮 2 时主面板会发生变化。 如果单击按钮 2,则实际面板中会显示子菜单和子面板:

有趣的是,应用程序只需要很长时间就可以在面板 1 和面板 2 之间切换(即按下按钮 1 或按钮 2)。按下按钮 2 并加载面板后,子面板之间的切换(如果按下按钮 2a、2b 和 2c)很快。

正如 Davin Tryon 在他对这篇文章的回答中所建议的那样 >Long running application slows down

但这些价值对我来说似乎并不高......

编辑 03/23/13 下午 6:11: DasKrümelmoster 询问 Button/Panel 1 和 Button/Panel 2 之间的切换代码:

activePanel.Hide();
activePanel = getPanelFromSelectedMenuElement(selectedMenuElement); // would return "panel2";

在子面板之间切换时基本相同。

【问题讨论】:

  • 能否提供一些按钮 2 中的“切换代码”?
  • 参见 OP(编辑 1)
  • +1 确实有。我已经从我的应用程序中删除了所有计时器,现在它运行顺利。如何释放所有非托管资源?我试图处理我所有的对象,但这并没有解决问题......
  • 如果您有 VS Premium 或 Ultimate,您可以尝试 代码分析 功能,尤其是 Microsoft.Reliability 规则。如果可以,请分享计时器代码。要定位错误,请将计时器设置为更短的间隔并一次禁用一个。

标签: c# winforms


【解决方案1】:

您可以查看使用 Red Gate Antz 分析器 )http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/) 来检查内存等方面的任何问题。您也将有 14 天的评估期。

另外,也许看看对应用程序使用 Windows 性能计数器:http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters

【讨论】:

    【解决方案2】:

    这可能与 C#、winforms 或您的应用程序无关。 Windows 可能会将应用程序的内存部分交换到磁盘,因为其他应用程序需要它。当您在长时间延迟后访问应用程序的某些部分时,交换的内存将从磁盘加载回来,这可能需要一些时间。

    【讨论】:

    • 我怎样才能防止这种情况发生?此外,我认为它必须与我的应用程序有关,因为没有其他应用程序正在运行(有足够的“空闲”CPU 和内存)。大约 30 分钟后它只会变慢......
    【解决方案3】:

    如果您在运行时按需创建控件:控件的创建速度很慢,而隐藏/显示它们却足够快。您可以将等待时间转移到应用程序的启动,因为它不太明显,并在启动时创建所有内容。

    查看此控件以帮助设计页面而不在运行时显示页面:https://stackoverflow.com/a/6954785/1974021

    【讨论】:

    • 我在应用程序启动时创建一次。这是相当快的。但一段时间后,应用程序变得越来越慢,但没有创建新控件。
    【解决方案4】:

    您的问题可能没有足够的信息供人们回答。

    有一些关键的事情:

    1. 在主面板上附加控件的方法是什么

    2. 您是否处理了附加到主面板的子控件?如何?

    3. 根据你的代码信息非常少

      activePanel.Hide();
      activePanel = getPanelFromSelectedMenuElement(selectedMenuElement);
      

      下次getPanelFromSelectedMenuElement 会返回先前隐藏面板的相同实例吗?如果没有,您是否处理了未引用的面板?

    4. 控件管理的代码级层次结构是什么?

    您需要将此信息提供给可以获得有用答案的人。 或者,也许您只需通过查看设计即可找到原因。

    如果这些都没有问题,并且正如你所说的,不会是由 CPU 负载、内存使用、页面交换、磁盘访问和网络流动引起的;只有一件事你没有提到:显卡性能。

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      相关资源
      最近更新 更多