1

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

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

在此处输入图像描述

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

在此处输入图像描述

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

正如 Davin Tryon 在他对这篇文章的回答中所建议的那样 >长时间运行的应用程序变慢了< 我已经检查了 CPU、内存、磁盘和网络。

在此处输入图像描述

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

编辑 2013 年 3 月 23 日下午 6:11: DasKrümelmoster 询问按钮/面板 1 和按钮/面板 2 之间的切换代码:

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

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

4

4 回答 4

0

您可以查看使用 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

于 2013-03-23T16:58:56.567 回答
0

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

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

于 2013-03-23T17:04:24.400 回答
0

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

有一些关键的事情:

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

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

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

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

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

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

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

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

于 2013-03-23T23:17:42.287 回答
0

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

于 2013-03-23T16:59:26.300 回答