wpf 冷启动时加载缓慢的应用程序,许多模块?

wztqucjr  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(131)

早上好
我想暴露的问题,我有,当运行我的应用程序在冷 Boot (正确的时候重新启动电脑)在某些机器上变得缓慢,使主应用程序屏幕出现,如12秒。
然后第二次启动它,它工作得很好。
更多数据:- WPF应用程序桌面窗口在C#中。

  • 运行应用程序时,启动屏幕立即出现,登录窗口屏幕在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秒我看得太多了。
感谢您的评分

5gfr0r5j

5gfr0r5j1#

在第一次启动时加载和JIT一个.NET项目确实需要时间。如果您的硬盘非常非常慢,那么多个库可能需要更多的时间。
我猜想,在现代硬盘上,如果你把所有的代码放在一个可执行文件中,你的程序在冷启动时将花费相同的加载时间,只是在开始时加载一次,而不是在加载库时。
但你可以试试。将所有文件移到可执行项目中并对其进行测试。
一般来说,即时编译器(通常称为Jitter)会在您启动程序时将您的IL(中间语言)代码编译为本机代码。通过不同级别上的各种缓存,当您更频繁地执行时,这将更快。由于Jitters的强项是将IL编译为 * 完全 * 系统的规范,因此冷启动会清除所有这些缓存。毕竟,冷启动是当你的系统可能真的发生了变化(你可能已经安装了更多的RAM,不同的处理器等)。所以,是的,第一次启动程序需要更长的时间是正常的。
如果 * 您的 * 具体开始时间可以优化是只有你可以检查的东西。使用侧写器。

gpfsuwkq

gpfsuwkq2#

在下面的博客文章中有几个与WPF应用程序性能相关的好技巧:9 Tips to Reduce WPF App Startup Time的数据。
下面是一个简短的总结:
1.在.NET Framework中使用Ngen
1.在.NET中使用MultiCore JIT和ReadyToRun(核心)
1.按需加载大型数据源
1.按零件加载复杂视图
如果您正在使用DevExpress,您可以使用帖子中提到的其他优化技术

相关问题