冷启动WPF Load Slow应用程序,很多模块?

时间:2017-05-04 09:42:25

标签: wpf performance

早上好。

我想揭露我遇到的问题,当在某些机器上冷启动时运行我的应用程序时(正确地重新启动电脑),它会变慢,以便显示主应用程序屏幕,如12秒。

然后第二次启动它,它运行正常。

更多数据: - C#中的WPF应用程序桌面窗口。

  • 运行应用程序时,会立即显示启动画面,并在2-3秒内显示登录窗口(这是可以接受的)。
  • 当您在屏幕上输入用户名和密码时,接受的是当它很慢并且在主菜单中显示需要12秒时。 (冷启动时,下次你去正常)。

  • 所以我怀疑它可以,代码没有做任何例外:

1.-在与本地sql数据库的连接中是否存在问题? 2.-这可能是解决方案的结构吗?我解释说,该程序继承自合作伙伴,由一个内部有5个项目的解决方案组成。

 - Backend.UI  (where are the visualization forms and functionalities)
 - Business    (where it puts the BLO)
 - Data        (where you put the DAO)
 - Domain      (where it places the entities)
 - Resources  (Resource Files)

这种结构是否正确?将所有内容放在一个单独的项目中与文件夹分开是不是更好?

我通过以下说明,通过调试分析我看到,直到第一个登录屏幕才加载:

(CLR v4.0.30319:DefaultDomain):已加载' c:\ Prueba \ xxxx.BackEnd.UI \ bin \ Debug \ xxxx.BackEnd.UI.exe'。符号已加载。

一旦接受登录主菜单(这里是慢速,12秒)加载其他模块。

(CLR v4.0.30319:xxxx.BackEnd.UI.exe):已加载' c:\ Prueba \ xxxx.BackEnd.UI \ bin \ Debug \ xxxx.Domain.dll'。符号已加载。

(CLR v4.0.30319:xxxx.BackEnd.UI.exe):已加载' c:\ Prueba \ xxxx.BackEnd.UI \ bin \ Debug \ xxxx.Business.dll'。符号已加载。

(CLR v4.0.30319:xxxx.BackEnd.UI.exe):已加载' c:\ Prueba \ xxxx.BackEnd.UI \ bin \ Debug \ xxxx.Data.dll'。符号已加载。

这可能是问题吗?有几个项目(我认为不需要将它们分开)必须加载它们,这需要时间....

请记住,这种缓慢只是在启动机器后的第一次充电,然后一切都很好。 但是12秒我看得太多了。

提前感谢您的任何意见。

1 个答案:

答案 0 :(得分:0)

首次启动时加载和JIT .NET项目需要一些时间。如果您的硬盘非常非常慢,则多个库可能需要更多时间。

我猜想使用现代硬盘驱动器,如果将所有代码放入一个可执行文件中,您的程序将在冷启动时花费相同的加载时间,一次只在开始时,而不是在以后,库已加载。

但你可以尝试一下。将所有文件移动到可执行项目并进行测试。

一般来说,即时编译器(通常称为Jitter)会在您启动程序时将IL(中间语言)代码编译为本机代码。通过不同级别的各种缓存,当您更频繁地执行此操作时,这将更快。由于Jitters强大的套装正在将您的IL编译为完全系统的规格,所以冷启动会清除所有这些缓存。毕竟,冷启动就是当你的系统真的已经改变时(你可能已经有更多的RAM,不同的处理器等)。所以,是的,第一次启动程序需要更长的时间是正常的。

如果您的特定的开始时间可以优化,那么只有您可以检查。使用分析器。