WPF应用程序启动太慢

本文关键字:启动 应用程序 WPF | 更新日期: 2023-09-27 18:08:24

我目前的应用程序有问题,它是用c#和WPF开发的。应用程序由不同的流程图组成,每个流程图都包含在自己单独的窗口中。

在启动时,所有流程图类都在其窗口中实例化和初始化。然后窗口变为不可见,并出现流程图菜单。

随着每一个新的流程图,应用程序启动变得更慢。窗口初始化似乎消耗了很多时间。

我该如何解决这个问题?

我想到初始化在第一次需要或后台初始化。

注意:我忘记了一个非常重要的事实:流程图菜单是基于其他流程图创建的,因为每个流程图都呈现为图像,以便显示缩略图菜单按钮。

WPF应用程序启动太慢

解决这个问题有很多方法。首先,您必须从c'tor中删除初始化。

移动到哪里?或者使用Window_onLoad事件,这样应用程序将首先加载,然后开始初始化流程图(使用新线程将避免UI冻结)。

或者一旦用户从菜单中选择了所需的流程图,您就显示窗口并开始初始化内部流程图,在繁忙时显示漂亮的"加载.."动画,并在完成后显示流程图。

我更喜欢第二种方法,在需要的时候初始化每个对象。

编辑:

因为你必须根据流程图来渲染拇指,所以我会这样做:将流程图init移动到主窗口Loaded事件,并在不同的线程上初始化每个流程图,当繁忙时显示一个漂亮的"请等待……"动画。这样主应用窗口出现,用户看到应用正在加载,你的拇指将同时创建,因此加载时间将减少。一旦所有的拇指创建,隐藏动画。

在加载主窗口之前不要实例化所有流程图类。

作为第一种方法,我会在需要时使用初始化。

如果这被证明是不受欢迎的,因为人们不喜欢等待,那么就去后台初始化,首先实例化最流行或最新的流程图。这在大多数情况下都是正确的,所以用户不必等待。

如果您需要流程图的缩略图,那么为什么不保存上次渲染流程图时的缩略图并使用它呢?因此,当创建流程图时,首先保存在该点保存缩略图。然后,当您填充列表时,将其从数据库/磁盘中取出并呈现。

还没有人提到剖析,但为什么不试试(最后一段)呢?

你会很容易地看到花这么长时间的主要原因。很有可能,这是一些相当琐碎的事情,您可以很容易地修复。

如果你想要更多的解释,请看这里