早上好。
我想揭露我遇到的问题,当在某些机器上冷启动时运行我的应用程序时(正确地重新启动电脑),它会变慢,以便显示主应用程序屏幕,如12秒。
然后第二次启动它,它运行正常。
更多数据: - C#中的WPF应用程序桌面窗口。
当您在屏幕上输入用户名和密码时,接受的是当它很慢并且在主菜单中显示需要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秒我看得太多了。
提前感谢您的任何意见。
答案 0 :(得分:0)
首次启动时加载和JIT .NET项目需要一些时间。如果您的硬盘非常非常慢,则多个库可能需要更多时间。
我猜想使用现代硬盘驱动器,如果将所有代码放入一个可执行文件中,您的程序将在冷启动时花费相同的加载时间,一次只在开始时,而不是在以后,库已加载。
但你可以尝试一下。将所有文件移动到可执行项目并进行测试。
一般来说,即时编译器(通常称为Jitter)会在您启动程序时将IL(中间语言)代码编译为本机代码。通过不同级别的各种缓存,当您更频繁地执行此操作时,这将更快。由于Jitters强大的套装正在将您的IL编译为完全系统的规格,所以冷启动会清除所有这些缓存。毕竟,冷启动就是当你的系统真的已经改变时(你可能已经有更多的RAM,不同的处理器等)。所以,是的,第一次启动程序需要更长的时间是正常的。
如果您的特定的开始时间可以优化,那么只有您可以检查。使用分析器。