我的当前应用程序出现了问题,该应用程序是使用WPF在C#中开发的。该应用程序由不同的流程图组成,每个流程图都包含在自己独立的窗口中。
在启动时,所有流程图类都在其窗口中实例化并初始化。然后窗口变为不可见,并出现流程图菜单。
每个新流程图启动应用程序都会变慢。窗口初始化似乎消耗了很多时间。
我怎么能解决这个问题?
我想到了第一次需要时的初始化或后台初始化。
注意:我忘记了一个非常重要的事实:流程图菜单是基于其他流程图创建的,因为每个流程图都会呈现为图像,以便显示缩略图菜单按钮。无论如何,这是让我对性能产生影响的问题。
答案 0 :(得分:2)
你有很多解决这个问题的方法。 首先,您必须从c'tor中删除初始化。
搬家的地方? 要么是Window_onLoad事件,这样应用程序将首先加载,然后开始初始化流程图(使用新线程将避免UI冻结)。
或者,一旦用户从菜单中选择所需的流程图,您将显示窗口并开始初始化内部流程图,在忙碌时显示一个漂亮的“loading ..”动画,并在完成后显示流程图。 / p>
我更喜欢第二种方法,在需要时初始化每个对象。
修改强> 由于您必须根据流程图渲染拇指,我会执行以下操作: 将流程图init移动到主窗口Loaded事件,并在不同的线程上初始化每个流程图,同时忙于显示一个不错的“请稍候......”动画。这样,主应用程序窗口出现,用户看到应用程序正在加载,您的拇指将同时创建,因此加载时间将减少。创建完所有拇指后,隐藏动画。
答案 1 :(得分:0)
在加载主窗口之前,不要实例化所有流程图类。
作为第一种方法,我会在需要时进行初始化。
如果这被证明是不受欢迎的,因为人们不喜欢等待,那么首先使用最流行或最新的流程图进行背景初始化。这大部分时间都是正确的,因此用户无需等待。
如果您需要有流程图的缩略图,那么为什么不保存上次流程图渲染时的缩略图并使用它?因此,在创建流程图时,首先保存,然后在该点保存缩略图。然后,当您填充列表时,将其拉出数据库/关闭磁盘并进行渲染。
答案 2 :(得分:0)
还没有人提到过性能分析,但为什么不进行just try (the last paragraph of) this?
您很容易看到长时间拍摄的主要原因。 很有可能,你可以很容易地解决这个问题。
如果您想要更多解释,look here。