2011-09-12 42 views
0

我的当前应用程序存在问题,这是使用WPF在C#中开发的。该应用程序由不同的流程图组成,每个流程图都包含在各自的独立窗口中WPF应用程序启动速度太慢

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

对于每个新流程图,应用程序启动都会变慢。窗口初始化似乎耗费大量时间。

我该如何解决这个问题?

我想到初次使用时需要初始化或后台初始化。

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

+2

这就是为什么几乎每个WPF应用程序都有一个启动画面:-) –

+0

您也可以尝试[ngen](http://msdn.microsoft.com/en-us/library/6t9t5wcf(v = vs80))。 aspx)相关的程序集。 –

回答

2

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

在哪里移动它? 要么Window_onLoad事件,这种方式应用程序将首先加载,然后开始初始化流程图(使用新的线程将避免UI冻结)。

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

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

编辑: 既然你已经呈现基于流程图的大拇指,我会做到以下几点: 移动流程图初始化到主窗口中加载事件,并初始化在不同的线程每个流程图,而忙展示一个不错的“请稍等..”动画。这样主应用程序窗口出现,用户看到应用程序正在加载,您的拇指将同时创建,因此加载时间将减少。一旦创建了所有的拇指,就隐藏动画。

+0

没错,但是和我对ChrisF评论的一样,我忘记了一个重要的事实,这可能会让这变得更加复杂。我把它附加在我原来的问题上。 –

+0

@platzhirsch,请参阅答案编辑 – MichaelS

0

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

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

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

如果您需要有流程图的缩略图,那么为什么不保存流程图最后呈现时使用的缩略图?所以,当流程图创建时先保存一个缩略图。然后,当你填充列表时,将其从数据库/脱离磁盘中提取出来。

+0

的确,你的建议让我想起了我在原始问题中忘记的一个重要事实。我追加了它。 –

+0

@plazhirsch - 查看更新 – ChrisF

0

没有人提到过配置文件,但为什么不是just try (the last paragraph of) this

你会很容易地看到很长一段时间的主要原因。 机会是,你可以很容易地修复它是相当微不足道的。

如果你想要更多的解释,look here