C# NGen和Gacutil最佳实践

C# NGen和Gacutil最佳实践,c#,winforms,ngen,gacutil,C#,Winforms,Ngen,Gacutil,我一直在开发一个WinForms应用程序,它有大约5个由我们编写的引用程序集,以及大约8个由第三方编写的引用程序集(我们不希望在将来更新它们,除非出现严重错误-Infragistics/DevXpress组件!) 我们的启动时间有点太长了,我想知道的是,将它们添加到Gac中,并对它们进行加密是否是一种方式 当我们安装到NGen缓存中时,它也需要在gac中吗?这两者之间有什么联系?我应该瞄准哪一个?我们有一个exe,我会做一个ILMerge,但我不确定这在我们的场景中是否会起作用——说来话长 另外

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

我们的启动时间有点太长了,我想知道的是,将它们添加到Gac中,并对它们进行加密是否是一种方式

当我们安装到NGen缓存中时,它也需要在gac中吗?这两者之间有什么联系?我应该瞄准哪一个?我们有一个exe,我会做一个ILMerge,但我不确定这在我们的场景中是否会起作用——说来话长


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

听起来您的问题定义某种程度上暗示了您的解决方案☺

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

你应该做的是分析应用程序,并确保情况属实。这是可能的,但是如果正在进行一些初始化,而您过于关注优化错误的位置,该怎么办

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

既然您谈论的是Winforms应用程序,那么我假设您有Visual Studio。如果是,您可以将其用于托管应用程序


祝你好运 还有一些很好的通用指南、ngen最佳实践以及避免程序集重定基址的技巧(尽管对于您正在使用的5个左右的引用程序集,不要期望奇迹发生)


然而,与在其他地方寻找快速解决方案相比,通过查找自己特定应用程序中的特定瓶颈,您可能会在启动时间上获得最显著的减少

改进启动时间的主要思想是尽可能使用延迟初始化。不要在启动后立即实例化不必要的东西。使用模式。也可以在显示主窗体后启动后台初始化工作程序来执行非关键初始化。等等等等等等


您还可以检查以下内容。

您可能需要使用探查器进行一次挖掘,以首先查看是什么导致了速度缓慢。ANTS(由RedGate编写)是一个很好的例子。对于关于改进应用程序启动时间的CLR Inside Out文章+1。非常有用。(不过,你应该在超链接中包含文章的标题——我差点没点击它。)