【发布时间】:2026-02-13 23:10:01
【问题描述】:
我有一个 Visual Studio 2005/C# ClickOnce 应用程序,它从 Web service 获取所有数据。我已经对应用程序进行了调整,让用户觉得它非常活泼,尽管它必须从 Web 服务中获取几乎所有内容的数据。
但是,这家初创公司仍然非常缓慢。似乎需要一段时间才能生成第一个 Web 服务调用。之后就好了。
如何加快此类应用程序的启动速度?我需要生成序列化程序集吗?
【问题讨论】:
我有一个 Visual Studio 2005/C# ClickOnce 应用程序,它从 Web service 获取所有数据。我已经对应用程序进行了调整,让用户觉得它非常活泼,尽管它必须从 Web 服务中获取几乎所有内容的数据。
但是,这家初创公司仍然非常缓慢。似乎需要一段时间才能生成第一个 Web 服务调用。之后就好了。
如何加快此类应用程序的启动速度?我需要生成序列化程序集吗?
【问题讨论】:
花一些时间分析您的应用程序加载的程序集。这将对应用程序的加载时间产生最大的影响。如果您有仅偶尔使用的类型,请将它们移至另一个程序集。 ClickOnce 可以按需优化程序集的下载,因此在加载时减少所需的程序集数量将使其加载速度更快。
您还可以拥有一种“存根”启动器,它具有最低限度的程序集依赖项,可动态加载其他程序集 (Assembly.Load) 并在加载后调用实际处理。
【讨论】:
您可以使用 ClickOnce 文件组将应用程序拆分为可管理的部分,然后在需要时使用 ClickOnce API 下载组。文章 ClickOnce File Groups 解释了如何做到这一点。
【讨论】:
确保您获得 .NET 3.5 SP1,因为在启动方面有显着的性能改进。尤其是 WPF 应用程序。
对于 Web 服务调用,如果确保在编译时生成序列化程序集,则可以加快速度。据我所知,Visual Studio 并不知道何时自动生成此文件,但您可以使用 SGEN.EXE 来完成。
它创建一个单独的程序集,例如 MyApp.XmlSerializer.dll,其中包含 Web 服务调用的所有序列化代码。如果没有这个,您的应用程序将对程序集进行失败的探测,然后动态生成代码并在内存中编译它,这就是您的第一次 Web 服务调用缓慢的原因。
【讨论】: