用C#(Forms)编写的应用程序在一段时间后会变慢(特别是在从睡眠模式唤醒后30分钟之后)。
该应用程序具有以下结构:
按下按钮1或按钮2时,主面板会发生变化。 如果单击按钮2,则实际面板中将显示子菜单和子面板:
有趣的是,应用程序只需要很长时间就可以在面板1和面板2之间切换(即按下按钮1或按钮2)。按下按钮2并加载面板后,子面板之间的切换(如果按下按钮2a,2b和2c)很快。
正如Davin Tryon在对这篇文章的回答中提出的那样> Long running application slows down<我检查了CPU,内存,磁盘和网络。
但这些价值对我来说似乎并不高......
编辑03/23/13 6:11 p.m。: DasKrümelmoster要求按钮/面板1和按钮/面板2之间的切换代码:
activePanel.Hide();
activePanel = getPanelFromSelectedMenuElement(selectedMenuElement); // would return "panel2";
在子面板之间切换时基本完成相同的操作。
答案 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)
您的问题可能没有足够的信息供人们回答。
有一些重要的事情:
您在主面板上附加控件的方法是什么
您是否处理了附加到主面板的子控件?如何?
根据您的代码信息
activePanel.Hide();
activePanel = getPanelFromSelectedMenuElement(selectedMenuElement);
下次getPanelFromSelectedMenuElement
会返回先前隐藏的面板的同一个实例吗?如果没有,你是否处置了未引用的面板?
什么是控件管理的代码级层次结构?
您需要向可以获得有用答案的人提供此信息。 或许您可以通过查看设计找到原因。
如果这些都没有问题,并且正如您所提到的那样,不会由CPU加载,内存使用,页面交换,磁盘访问和网络流量引起;你没有提到的只有一件事:显卡性能。