如何快速加载winforms应用程序

时间:2011-07-30 18:10:59

标签: c# winforms

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

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

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

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

谢谢和问候 Gagan Janjua

4 个答案:

答案 0 :(得分:10)

一些建议:

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

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

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

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

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

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

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

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

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

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

答案 1 :(得分:2)

尽量减少在主窗体的on load或主窗体上放置的任何控件期间执行的代码。

您还可以浏览NGEN这是Microsoft的工具,有助于提高托管应用的性能

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您是否需要立即进行所有控制?如果没有,也许您可​​以在一些事件触发后以编程方式加载它们,让您知道您需要该控件。