我有一个 WinForms 应用程序。主窗体有很多控件,这也是加载速度非常慢的原因之一。我想做的是使表单加载速度更快。
我已经设置了beginupdate和endupdate。该表单不会在后台工作线程中呈现,因为这是主表单。没有初始形式。当用户单击应用程序图标时,这是加载的第一个表单。添加进度条或任何启动形式对我来说不是一个好主意。
我在这里检查了有关堆栈溢出的其他问题,但他们似乎没有遇到与我相同的问题。
如果您有一些例子/想法,如果您能与我分享,那就太好了。
一些建议:
尽量减少 UI 的复杂性。您的用户将会感谢您,并且您需要加载的控件也会减少。例如,如果您有 3 或 4 个不经常使用的控件,您是否可以将它们移至对话框或表单的折叠“高级”部分,以便您可以推迟创建/显示它们?是否需要所有控制?真的吗?想想您想要实现的工作流程 - 当前的控件集是实现该工作流程的最简单方法吗?是否需要立即显示所有控件?也许您可以将它们放置在选项卡控件中的单独选项卡上(因此只有在显示选项卡时才实际创建控件)?
您能否减少所使用的控件类型的范围?每种新类型的控件都可能导致您的程序加载新的 dll 来支持它。每个必须初始化的 dll 都会导致额外的启动时间。
您是否使用了启动缓慢的控件?简单的文本字段会很快,但复杂的图形控件可能会很慢。
加载了多少个程序集(您自己的)?将所有代码合并到一个程序集中(例如使用 ILMerge),加载时间可能会大大缩短。
删除所有不需要的初始化代码。你能简化初始化吗?是否可以推迟任何初始化(例如,仅在用户单击实际需要存在该数据的第一个按钮时才创建一些成员变量,如果实际上还不需要数据库,则不要尝试创建与数据库的连接等)
您可以推迟(部分)UI 的创建吗?例如,您可以将一组控件放入单独的 UserControl 表单中,然后在启动后不久以编程方式将此表单添加到 MainForm 中(例如在计时器上)。这将使您的 MainForm 非常快速地出现,然后不久之后就会“填充”其他控件,这可能不会改善实际的启动时间,但它会“感觉”得更快并且启动响应更快。 (如果您的 MainForm 滚动并且这些额外的控件最初不在屏幕上,则这种方法也非常有效,因为只有当用户向下滚动足以看到它们时才需要创建它们)
您是否显示任何可能加载缓慢的信息(例如大位图图像或从 SQL 服务器获取的数据)?您可以推迟它们的加载或将其作为后台线程运行吗?使用压缩来加快加载速度?降低分辨率以最大限度地减少必须加载的数据量?预处理数据并将其存储在快速启动缓存中以供下次程序运行时使用?
某些控制措施可以用优化方法代替吗?例如您可以将“按钮栏”创建为一组 10 个独立控件,或者创建为具有 10 个按钮外观的单个控件。使单个控件初始化和重绘速度比 10 个独立控件要容易得多。
当然,一旦收集到最明显的容易实现的目标(甚至之前):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)