C# 如何更快地打开winform?
我有一个c#应用程序,有很多带有控件的表单。C# 如何更快地打开winform?,c#,winforms,C#,Winforms,我有一个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正在成功加载第一个表单