7

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

我们的启动时间在冷启动时有点太长了,我想知道是否将它们添加到 Gac 并对其进行更新是否是要走的路。

当我们安装到 NGen 缓存中时,它是否也需要在 gac 中?两者之间有什么联系?我应该瞄准哪个?我们有一个 exe,我会做一个 ILMerge,但我不确定这是否适用于我们的场景 - 长篇大论。

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

4

3 回答 3

5

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

您还可以查看以下文章(提高应用程序启动时间)

于 2009-06-25T08:20:57.430 回答
0

在我看来,您的问题定义在某种程度上暗示了您的解决方案☺</p>

换句话说,你怎么知道启动时间来自加载程序集?

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

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

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

祝你好运!

于 2009-06-25T05:03:12.660 回答
0

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

本文还提供了一些很好的通用指南、ngen 最佳实践和避免程序集变基的技巧(尽管对于您正在使用的 5 个左右引用的程序集,不要指望奇迹)。

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

于 2009-06-25T06:22:17.700 回答