如何快速加载winforms应用程序

Gag*_*gan 7 c# winforms

我有一个winforms应用程序.主窗体有很多控件,这是导致加载非常慢的原因之一.我想做的是使表单加载更快.

我已经设置了beginupdate和endupdate.表单未在后台工作线程中呈现,因为这是主要表单.没有初始表格.当用户单击应用程序图标时,这是第一个加载的表单.添加进度条或任何初始形式对我来说不是一个好主意.

我已经在Stack溢出检查了其他问题,但它们似乎没有像我一样面临同样的问题.

如果您有一些想法/想法,如果您可以与我分享,那将是您的好事.

谢谢并问候Gagan Janjua

Jas*_*ams 10

一些建议:

  • 尽量减少UI的复杂性.您的用户会感谢您,并且您将加载更少的控件.例如,如果你有3个或4个不经常使用的控件,你可以将它们移动到对话框或折叠表单的"高级"部分,这样你可以推迟创建/显示它们吗?是否需要所有控件?真?想想您要实现的工作流程 - 当前的控件集是实现工作流程的最简单方法吗?是否需要立即显示所有控件?也许您可以将它们放在选项卡控件中的单独选项卡上(因此实际上只有在显示选项卡时才创建控件)?

  • 你能减少使用的控制类型的范围吗?每种新类型的控件都可能导致程序加载一个新的dll来支持它.每个必须初始化的dll都会导致额外的启动时间.

  • 您是否正在使用任何启动缓慢的控件?简单的文本字段将很快,但复杂的图形控件可能很慢.

  • 加载了多少个(你自己的)程序集?将所有代码组合到一个程序集中(例如使用ILMerge),加载时间可能会相当大.

  • 删除任何不需要的初始化代码.你能简化初始化吗?可以推迟任何初始化(例如,当用户点击实际需要存在该数据的第一个按钮时,仅创建一些成员变量,如果实际上还不需要,则不要尝试创建与数据库的连接等)

  • 你能推迟创建(部分)用户界面吗?例如,您可以将一组控件放入单独的UserControl表单中,然后在启动后不久以编程方式将此表单添加到MainForm中(例如,在计时器上).这将允许您的MainForm非常快速地显示,然后在使用其他控件后不久"填充",这可能无法改善实际的启动时间,但它会"感觉"更快,响应更快.(如果您的MainForm滚动并且这些额外的控件最初不在屏幕上,这种方法也非常有效,因为只有在用户向下滚动才能看到它们时才需要创建它们)

  • 您是否正在显示可能加载缓慢的任何信息(例如,大型位图图像或从SQL服务器获取的数据)?你能推迟加载它们还是作为后台线程运行?使用压缩来加速加载?降低其分辨率以最小化必须加载的数据量?预处理数据并将其存储在快速启动缓存中,以便下次运行程序时?

  • 是否可以通过优化方法替换某些控件?例如,您可以创建一个"按钮栏"作为一组10个单独的控件,或者作为单个控件绘制iself,其外观为10个按钮.单个控件初始化和重绘速度比10个独立控件更容易.

当然,一旦收集到最明显的低悬的水果(甚至之前):

  • 在分析器下运行该程序,看看它在哪里花费时间.

  • 我运行了分析器,几乎52%的延迟是由于表单初始化.我有一个类似IDE的环境,在任何给定的时间用户可能需要大量的其他控件..这就是问题所在.. (2认同)