使用 ClickOnce 部署的应用程序启动缓慢

Slow application startup using ClickOnce deployment

我们正在使用 ClickOnce 部署我们的应用程序,我们注意到当我们通过单击 ClickOnce 桌面图标启动我们的应用程序时,应用程序启动速度比直接从 .可执行程序。 我已经看到这不是未知问题 ( Slow startup of Clickonce winforms application after update ),但似乎仍未解决。 我想知道为什么会发生这种情况以及如何解决这个问题。

我只使用一台机器,所以我猜它与机器无关,与防病毒软件无关。

我注意到启动期间内存管理模式不同:ClickOnce 部署需要更多时间,一段时间后它会释放一些内存。 我们仍在谈论 12 兆字节的差异(通过 ClickOnce 为 67MB,通过直接 .exe 为 50)。

这让我抓狂...

谢谢

I guess it's not machine-related, not antivirus-related.

您需要通过在开发 VM 上安装与客户端相同的防病毒软件来证明该假设。如果您无法重现启动缓慢的情况,请比较机器之间的 ProcMon 跟踪。


我相信 Hans 很赚钱,根据您在问题中提到的 QA 中的正确答案,杀毒软件是最有可能的罪魁祸首:

I have seen very poor performance (minutes vs a few seconds) for a newly deployed first run .Net application is the users are running antivirus software as the antivirus tool checks the newly Jitted assemblies are not malicious.


确保您使用的是 .NET Framework 3.5 SP1 或更高版本,因为 "there are significant performance improvements in the area of startup. Particularly with WPF applications" 并且 3.5 SP1 包含启动画面。

启动画面可能是一种快速(临时)修复。唉,这不是一个理想的解决方案。


ClickOnce 现在已经很老了,这个领域已经取得了很多进步,所以为什么不采用另一种具有不同部署机制的策略,例如 Windows 安装程序和应用程序中的更新菜单。我详细介绍了制作 MSI 安装程序的步骤 Install to same path when upgrading application

如果你想严格要求每个人都使用最新版本而不是 ClickOnce,最好有一个网络服务,应用程序在启动时 ping 并在新版本发布时下载并执行更新。

此外,请参考 Google 在这方面的提示。您记得 Jeff Atwood 的文章:http://blog.codinghorror.com/the-infinite-version/

如果您不使用 ClickOnce,您可以使用 NGEN 和 bsdiff, possibly even Google courgette


还有其他一些方法可以加快 ClickOnce 应用程序的启动速度 discussed here


虽然这可能无法直接回答您的问题,但希望它能让您思考如何确定根本原因and/or使用不同的更新方法来推出更新。

当您发布构建时,请选择 运行 离线模式下的应用选项。否则,clickonce 安装程序将尝试从您的服务器而不是本地 exe 启动应用程序。

如果有任何其他情况需要研究或这有帮助,请告诉我。

谢谢,