WPF应用程序启动太慢

时间:2011-09-12 10:36:31

标签: c# wpf performance

我的当前应用程序出现了问题,该应用程序是使用WPF在C#中开发的。该应用程序由不同的流程图组成,每个流程图都包含在自己独立的窗口中。

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

每个新流程图启动应用程序都会变慢。窗口初始化似乎消耗了很多时间。

我怎么能解决这个问题?

我想到了第一次需要时的初始化或后台初始化。

注意:我忘记了一个非常重要的事实:流程图菜单是基于其他流程图创建的,因为每个流程图都会呈现为图像,以便显示缩略图菜单按钮。无论如何,这是让我对性能产生影响的问题。

3 个答案:

答案 0 :(得分:2)

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

搬家的地方? 要么是Window_onLoad事件,这样应用程序将首先加载,然后开始初始化流程图(使用新线程将避免UI冻结)。

或者,一旦用户从菜单中选择所需的流程图,您将显示窗口并开始初始化内部流程图,在忙碌时显示一个漂亮的“loading ..”动画,并在完成后显示流程图。 / p>

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

修改 由于您必须根据流程图渲染拇指,我会执行以下操作: 将流程图init移动到主窗口Loaded事件,并在不同的线程上初始化每个流程图,同时忙于显示一个不错的“请稍候......”动画。这样,主应用程序窗口出现,用户看到应用程序正在加载,您的拇指将同时创建,因此加载时间将减少。创建完所有拇指后,隐藏动画。

答案 1 :(得分:0)

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

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

如果这被证明是不受欢迎的,因为人们不喜欢等待,那么首先使用最流行或最新的流程图进行背景初始化。这大部分时间都是正确的,因此用户无需等待。

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

答案 2 :(得分:0)

还没有人提到过性能分析,但为什么不进行just try (the last paragraph of) this

您很容易看到长时间拍摄的主要原因。 很有可能,你可以很容易地解决这个问题。

如果您想要更多解释,look here