我一直在做一个WinForms应用程序,它有大约5个引用的程序集--由我们编写,还有大约8个由第三方引用的程序集(我们不希望在未来更新它们,除非出现严重的错误-- Infragistics/DevExpress组件!)。
我们的启动时间对于冷启动来说有点太高了,我想知道的是,将它们添加到Gac中并生成它们是不是可行的方法。
当我们安装到NGen缓存中时,它也需要在gac中吗?这两者之间有什么联系?我的目标应该是什么?我们有一个exe,我想做一个ILMerge,但我不确定这是否会在我们的长篇故事中起作用。
发布于 2009-06-25 08:20:57
改善启动时间的主要思想是尽可能使用延迟初始化。不要在启动后立即实例化不必要的内容。使用lazy init模式。也可以在show main窗体之后启动后台初始化工作程序来执行非关键初始化。等等等等。
您还可以检查以下article (Improving Application Startup Time)。
发布于 2009-06-25 05:03:13
在我看来,您的问题定义以某种方式暗示了您的解决方案☺
换句话说,您如何知道启动时间来自于加载程序集?
你应该做的是分析这个应用程序,并确保它是正确的。这是可能的,但如果正在进行一些初始化,并且您过于专注于优化错误的位置,该怎么办?
Here有一些工具可以帮助你分析非托管应用程序。
既然你在谈论Winforms应用程序,我假设你有Visual Studio。如果是这样,您可以为您的托管应用程序使用its profiler。
祝好运!
发布于 2009-06-25 06:22:18
如果您没有使用.net框架的3.5 SP1,那么您应该考虑在该平台上进行基准测试,看看是否会有所不同。已经做出了一些改进,可能会缩短应用程序的启动时间:CLR Optimizations In .NET Framework 3.5 SP1
This article也有一些很好的通用指南,ngen最佳实践,以及避免程序集重新基址的技巧(尽管对于您正在使用的大约5个引用的程序集,不要期待奇迹)。
然而,你可能会通过在你自己的应用程序中寻找特定的瓶颈来获得最显著的启动时间缩短,而不是在其他地方找到快速修复。
https://stackoverflow.com/questions/1042200
复制相似问题