如何快速加载winforms应用程序

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

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

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

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

谢谢并问候Gagan Janjua

一些建议:

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

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

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

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

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

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

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

  • 某些控件可以用优化方法替换吗? 例如,您可以创建一个“按钮栏”作为一组10个单独的控件,或者作为一个控件,使用10个按钮的外观绘制iself。 单个控件初始化和重绘速度比10个独立控件更容易。

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

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

尝试最小化on load主窗体或放置在主窗体上的任何控件期间执行的代码。

您还可以探索NGEN ,它是Microsoft的工具,有助于提高托管应用程序的性能

当表单加载时,它初始化其所有控件。
表格本身并没有花费你很长时间..这是你的控制。

查看控件并检查构造函数和初始值设定项中可以改进的内容。

你需要立即进行所有控制吗? 如果不是,也许你可以在一些事件触发后以编程方式加载它们,让你知道你需要那个控件。