C# 如何更快地打开winform?

C# 如何更快地打开winform?,c#,winforms,C#,Winforms,我有一个c#应用程序,有很多带有控件的表单。 每次我运行应用程序时,有许多控件的窗体都会缓慢打开。 那么有没有办法让它更快地打开呢?与其让它更快地加载,不如建议您为用户提供更好的用户体验 首先,首先加载启动视图(加载进度)。在后台运行的下一个线程上,用许多控件加载视图。当您的视图完全加载后,隐藏启动视图并显示您的视图。考虑到所提供的信息,我会说: 将控件分为可能的组(用户几乎不可能同时需要所有控件),并将它们放在选项卡控件的单独选项卡上。 在第一个选项卡上自动(以统计方式)仅加载控件,其他控件则

我有一个c#应用程序,有很多带有控件的表单。
每次我运行应用程序时,有许多控件的窗体都会缓慢打开。

那么有没有办法让它更快地打开呢?

与其让它更快地加载,不如建议您为用户提供更好的用户体验


首先,首先加载启动视图(加载进度)。在后台运行的下一个线程上,用许多控件加载视图。当您的视图完全加载后,隐藏启动视图并显示您的视图。

考虑到所提供的信息,我会说:

将控件分为可能的组(用户几乎不可能同时需要所有控件),并将它们放在选项卡控件的单独选项卡上。
在第一个
选项卡上自动(以统计方式)仅加载控件,其他控件则以手动方式加载。
在这种情况下,如果用户不需要某些功能,则永远不会切换到包含该功能的选项卡,因此不会加载用户不需要的该功能的控件,这将提供总体更快的加载时间

如果有一个数据应该推送到控件上,在可能的情况下以异步方式加载它


希望这有帮助。

最好的方法是将解决方案分为多个层

YourAppUI contains forms
YourApp.Controls contains controls
YourApp.BLL contains business logic 
YourApp.DAL contains data access layer

正如您从评论中看到的,没有一种通用的“使事情更快”技术。你需要找到瓶颈并解决它。以下是一些要点:

  • 所有窗体上的所有控件都是在设计器中静态添加的,还是在运行时根据环境/用户详细信息动态添加的,还是通过反射动态加载的?这些可以显著降低UI加载时间

  • 一个表单上有数百个控件吗?如果是这样,请考虑将表单拆分为较小的块。

  • 在表单加载事件期间,您是否有复杂的逻辑或数据访问?这也会降低UI响应速度。考虑启动应用程序“干净”,然后异步加载数据。

  • 使用剖析器!找一个好的、简单的分析器,看看你到底在哪里花费时间。你经常会对实际需要时间的事情感到惊讶。使用一个好的、已建立的分析器的试用版,或者考虑将来购买它。


如果您使用表单构造函数中的控件或在加载表单时使用耗时的代码,您可以编写
此.SuspendLayout()在该代码之前,并
此.ResumeLayout()在该代码之后。这可以防止几次耗时的布局操作。

我也遇到过类似的问题,但控件比您的多。
考虑到控件集相对较小,我认为罪魁祸首是数据访问层减慢了一切。(例如,该网格和组合的加载)


一个简单的操作可以告诉您很多事情,就是将数据访问移动到表单显示的事件。

多少是“许多控件”?“open slow”的速度有多慢?如何以不可见的方式加载表单,然后在适当的时候只
Show()?您在控件上执行了多少条语句?有两个网格、8个文本框、5个组合、6个按钮、2个列表框、1个工具箱和5个工具……您使用的是标准控件还是组件供应商提供的东西?并行任务库呢!;]这将如何使表单加载更快?加载30 MB的exe速度比1 MB慢。信息量没有改变,只是在几个程序集之间拆分。加载多个程序集比加载一个.exe慢。生成第一个表单时,哪个程序集不会加载?你真的相信.exe加载时间真的是最大的性能损失吗?我很难相信这一点。表单生成需要时间。以这个实际示例为例,一个包含2个项目的解决方案一个包含主表单,第二个(dll)包含一些未在主表单生成解决方案中使用的控件,转到调试文件夹删除dll,然后双击exe,您将看到exe正在成功加载第一个表单