如何在Windows启动时优化WPF应用程序启动
问题描述:
我实现了一个WPF应用程序,并在Windows启动时将其注册为启动。我的应用程序是一个简单的登录应用程序,当用户登录时出现在图标托盘中。问题是,Windows启动后大约需要30秒才能显示自己。我试过Ngen没有取得巨大成功。我想避免实施启动画面。我希望我的WPF应用程序在Windows启动后“立即”出现,类似于Windows Live Messenger的功能。我能做什么以减少启动时间?除了原生编码外,还有其他选择吗? 谢谢。如何在Windows启动时优化WPF应用程序启动
答
计算机闲置时是否还需要30秒才能启动(即,如果在计算机不忙时加载窗口时双击启动它)是否也需要30秒?
在Windows启动过程中,计算机通常忙于大量的内容,这可能会导致应用程序缓慢。那么你可以做的事情不多。
但是,为了提高WPF应用程序启动时的一般提示:
- 只有实例你真正需要展现给用户最初
- 降低你的控制/窗口的复杂的控制。
- 不要做任何时间在你控制的建设者耗时&窗口
- 喜欢读书,从本地磁盘上的文件即使是无辜的东西可能很耗时,如果磁盘是忙于其他的东西(像它通常是在Windows启动)
- Web服务调用可能需要花费很长一段时间,如果在网络尚未完全初始化尚未
- 一个简单的解决方法是卸载重活到
BackgroundWorker
或使用异步调用做I/O和网络请求
还有一个设置,你可以把app.config
告诉运行时不与证书认证组件(此检查可能需要很长的时间,尤其是冷起动):
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
一些更一般提示可以在MSDN网站Application Startup Time上找到。
答
使用regedit在
HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \ Explorer中\序列化创建DWORD注册表
称为StartupDelayInMSec。
默认值应该设置为0,但仔细检查。
启动后,我的应用程序启动时间缩短了约10秒。
注意:序列化密钥可能不存在。
您可以通过右击资源管理器创建并选择新建 - >关键
与在冷启动时没问题,双击,大约需要2秒启动。问题是在Windows启动。我见过像Windows Live Messenger这样的应用程序,它们在Windows启动时立即启动,但这些应用程序都是本机应用程序我可以接近WPF中类似的东西吗? – pfongkye 2011-06-17 13:12:06
查看你的启动/构造函数代码,并查找诸如磁盘I/O和网络I/O之类的东西,并将它们移动到后台线程/异步代码。也许你的应用程序阻止等待尚未被Windows初始化的网络 – 2011-06-18 07:04:02
@IsakSavo其实简单的WPF Hello World应用程序演示了相同的行为 – Poma 2013-03-18 08:22:43