Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF应用程序启动太慢_C#_Wpf_Performance - Fatal编程技术网

C# WPF应用程序启动太慢

C# WPF应用程序启动太慢,c#,wpf,performance,C#,Wpf,Performance,我目前的应用程序是用C#和WPF开发的,我有问题。该应用程序由不同的流程图组成,每个流程图包含在各自的单独窗口中 启动时,所有流程图类都会在其窗口中实例化和初始化。然后使窗口不可见,并显示流程图菜单 随着每个新流程图的出现,应用程序的启动速度会变慢。窗口初始化似乎占用了很多时间 我如何处理这个问题 我在第一次需要初始化或后台初始化时想到了初始化 注意:我忘记了一个非常重要的事实:流程图菜单是基于其他流程图创建的,因为每个流程图都呈现为图像,以便显示缩略图菜单按钮。无论如何,这就是导致性能影响的问

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

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

随着每个新流程图的出现,应用程序的启动速度会变慢。窗口初始化似乎占用了很多时间

我如何处理这个问题

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


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

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

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

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


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

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

搬到哪里去? 无论是窗口加载事件,这样应用程序将首先加载,然后开始初始化流程图(使用新线程将避免UI冻结)

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

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

编辑: 由于必须根据流程图渲染拇指,因此我将执行以下操作:
将流程图初始化移动到主窗口加载的事件,并在不同的线程上初始化每个流程图,同时显示一个漂亮的“请等待…”动画。这样会出现主应用程序窗口,用户看到应用程序正在加载,同时会创建拇指,因此加载时间将缩短。创建所有拇指后,隐藏动画

还没有人提到评测,但为什么不呢

你会很容易地看到长期服用的主要原因。 很有可能,这是一件非常琐碎的事情,你可以很容易地解决


如果您需要更多的解释,.

这就是为什么几乎每个WPF应用程序都有一个启动屏幕:-)您也可以尝试相关的程序集。没错,您的建议让我想起了一个我在原始问题中忘记的重要事实。我附加了它。没错,但和我对ChrisF的评论一样,我忘记了一个重要的事实,这可能会让事情变得更复杂。我把它附加在原来的问题上。