【问题标题】:.NET: Windows forms/controls performance.NET:Windows 窗体/控制性能
【发布时间】:2011-02-24 07:47:35
【问题描述】:

我们有一个 UI 非常繁重的应用程序。最近我们的客户开始抱怨应用程序启动性能。 (以前我们的控件/表单在显示某种带有“开始”消息的初始屏幕时被初始化)。

我进行了一项研究,发现控件的 InitializeComponent()(由 VS 设计器生成)方法调用对于复杂的控件最多可能需要 ~0.4-0.5 秒。并且有很多这样的控件,因此我得到了大约 10-15 秒的应用程序启动时间。那里没有什么可以真正繁重的,只有控件初始化(例如,不同的工具条、工具条按钮、菜单条初始化、不同文本的设置等)。

在这种情况下,有没有办法提高控件初始化的性能?也许是某种缓存或类似的东西(所以我们的应用程序只会在第一次加载时缓慢启动)?

附:我们正在使用 .NET 2.0

提前致谢。

【问题讨论】:

  • 复杂的winform控件真的很慢。在需要时初始化它们(通过将它们放置在按需加载的单独面板中)或在“显示”事件中初始化它们,以便用户看到“某些东西”。
  • 我们也遇到过类似的问题。我建议使用“shell”启动应用程序,并将不同的功能分支到不同的模块/用户控件/子表单中。这样,如果用户不需要模块,他就不会在启动时受到惩罚。

标签: c# .net winforms performance


【解决方案1】:

您表示您至少对应用的启动时间进行了一些初步分析,但您是否使用 Visual Studio 的分析器、ANTS 或类似工具彻底分析了您的应用?

对您的应用进行彻底的分析可以让您最准确地了解您的应用所花费的时间。少一点,你只是在猜测。

您还可以考虑对应用的部分进行 NGEN,并重新分析应用的启动时间,以确定代码的 NGEN 是否确实带来了性能提升。

但是,如果您构建的东西非常复杂,您可能只是对用户的机器提出了太多要求。这就是为什么在尽可能与最终用户的硬件和环境相似的情况下测量代码的性能至关重要的原因。

要考虑的另一件事是 WinForms 并没有真正利用现代硬件加速图形。您可能会发现移植到 WPF 只是为您提供了所需的提升,但在向此路径提交大量资源之前,请务必仔细构建原型和配置文件。

HTH。

【讨论】:

    【解决方案2】:
    • 异步加载数据

    • 购买更快的电脑

    • 使用 WPF (.net 3.5)

    【讨论】:

    • 对于第二个项目符号,您的意思是提高运行应用程序的最低要求。
    • 我们确实是异步加载数据,问题在于UI初始化,我们不能在例如其他线程中这样做。也不能告诉客户他们需要升级他们的 PC 才能使用我们的产品,或者强制他们安装 .net 3.5..
    • @System.Exception:嗯?你从哪里得到的?你怎么能声称“WPF很慢”。慢怎么办?在什么情况下慢? WPF 使用 DirectX,并且通过扩展,硬件加速(如果可用)和(根据我的经验)在 UI 元素创建/操作和呈现方面比 WinForms 快得多。有任何事实可以支持这种说法吗?
    • @System.Exception 我不同意。
    猜你喜欢
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多