NGen和Gacutil的最佳实践

时间:2009-06-25 04:32:02

标签: c# winforms ngen gacutil

我一直在研究一个WinForms应用程序,它有大约5个引用的程序集 - 由我们编写,大约8个引用的程序集由第三方提供(我们不希望将来更新它们,除非出现严重错误 - Infragistics / DevExpress组件!)。

我们的启动时间对于冷靴来说有点太高了,我想知道的是将它们添加到Gac中并且是否可以使用它们。

当我们安装到NGen缓存中时,它是否也需要在gac中?什么是两者之间的联系?我应该针对哪一个?我们有一个exe,我会做一个ILMerge,但我不确定它会在我们的场景中工作 - 很长的故事。

此外,是否有可能获得我的exe所占用的内存 - 就像Java应用程序一样(如Netbeans!)

3 个答案:

答案 0 :(得分:5)

改善启动时间的主要思想是尽可能使用延迟初始化。启动后不要立即实例化那些不必要的东西。使用lazy init模式。也可以在show main form之后启动后台初始化worker来进行非关键初始化。等等,等等。

您还可以查看以下article (Improving Application Startup Time)

答案 1 :(得分:0)

听起来我的问题定义在某种程度上意味着你的解决方案☺

换句话说,您如何知道启动时间来自加载程序集?

您应该做的是分析应用程序并确保是这种情况。这是可能的,但是如果进行一些初始化并且你过于关注优化错误的位置会怎样呢?

Here有一些工具可以帮助您分析非托管应用。

由于您在谈论Winforms应用程序,我假设您有Visual Studio。如果是这样,您可以将its profiler用于您的托管应用。

祝你好运!

答案 2 :(得分:0)

如果您没有使用.net框架的3.5 SP1,您应该考虑在该平台上进行基准测试,看看您是否有所不同。已经进行了一些改进,可能会改善应用启动时间:CLR Optimizations In .NET Framework 3.5 SP1

This article也有一些很好的通用指南,ngen最佳实践和避免程序集变基的技巧(尽管对于你正在使用的5个左右的引用程序集,不要指望奇迹)。

然而,通过寻找您自己的特定应用程序中的特定瓶颈,而不是在其他地方找到快速解决方案,您可能会获得最显着的启动时间减少。