应用程序减速

时间:2013-03-23 16:54:01

标签: c# winforms

用C#(Forms)编写的应用程序在一段时间后会变慢(特别是在从睡眠模式唤醒后30分钟之后)。

该应用程序具有以下结构:

enter image description here

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

enter image description here

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

正如Davin Tryon在对这篇文章的回答中提出的那样> Long running application slows down<我检查了CPU,内存,磁盘和网络。

enter image description here

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

编辑03/23/13 6:11 p.m。: DasKrümelmoster要求按钮/面板1和按钮/面板2之间的切换代码:

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

在子面板之间切换时基本完成相同的操作。

4 个答案:

答案 0 :(得分:0)

您可以查看使用Red Gate Antz分析器{}({3}})查看内存等任何问题。您也将有14天的评估期。

此外,可以考虑针对应用程序使用Windows性能计数器:http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

有一些重要的事情:

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

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

  3. 根据您的代码信息

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

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

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

  5. 您需要向可以获得有用答案的人提供此信息。 或许您可以通过查看设计找到原因。

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