如何加快ClickOnce应用程序的启动速度

我有一个Visual Studio 2005 / C# ClickOnce应用程序,它从Web服务获取所有数据。 我已经将应用程序调整到了对用户来说非常活泼的地方,即使它必须从Web服务获取几乎所有内容的数据。

然而,创业公司仍然相当迟钝。 似乎需要一段时间才能生成第一个Web服务调用。 在那之后,没关系。

我该怎么做才能加速这类应用程序的启动? 我需要生成序列化程序集吗?

花一些时间分析应用程序加载的程序集。 这将对您的应用程序的加载时间产生最大的影响。 如果您的类型仅在有时使用,请将它们移动到另一个组件。 ClickOnce可以根据需要优化组件的下载,因此在加载时减少所需的组件数量将使其加载更快。

您还可以使用一种具有最小程序集依赖关系的“存根”启动程序,它们动态加载其他程序集(Assembly.Load)并在加载后调用实际处理。

您可以使用ClickOnce文件组将应用程序拆分为可管理的部分,然后在需要时使用ClickOnce API下载组。 文章ClickOnce文件组解释了如何执行此操作。

确保您获得.NET 3.5 SP1,因为在启动方面有显着的性能改进。 特别是WPF应用程序。

至于Web服务调用,如果确保在编译时生成序列化程序集,则可以加快速度。 根据我的记忆,Visual Studio不知道何时自动生成此文件,但您可以使用SGEN.EXE。

它创建一个单独的程序集,如MyApp.XmlSerializer.dll,其中包含Web服务调用的所有序列化代码。 如果没有这个,您的应用程序将对程序集执行失败的探测,然后动态生成代码并在内存中编译它,这就是您的第一个Web服务调用很慢的原因。