如何加快 .NET 程序集加载性能

Abe*_*bel 5 .net performance .net-assembly

我们有一个包含大约 50 个程序集(DLL 文件)的产品,其中大部分是在主可执行文件启动时需要和加载的。结果是即使在中等速度的机器上,加载程序集和对其进行 JIT 的时间也需要 2-3 秒,这在我们的情况下是不可接受的开销。

如果我们加载一次程序并从同一个仍在运行的可执行文件中多次运行它,则计时从几毫秒开始。但对于最终用户来说,这不是一个选项,他们将从命令行运行它。

我想在第一次实例化可执行文件时加快加载速度。冷启动(重新启动 Windows 后)和热启动之间有一个小的加速,但只是略微加速。我们可以使用 .NET 中哪些技术或工具来加速加载(注意:我们尝试了 ILMERGE,它只能帮助大约 30%,而 NGEN 不是一个选项,它需要在各种系统和架构上运行)。

我正在考虑创建一个服务和/或一个特定的 CLR 托管环境,但希望有一个更简单、更琐碎的解决方案。我还没有尝试过 GAC。

usr*_*usr 1

使用 NGEN 和多核 JIT。重构您的应用程序,使其在启动时需要更少的程序集和代码。使用 ILMerge 减少程序集数量,甚至有望删除一些未使用的代码。

所有这些都是您可以进行的优化。它们没有提供突破性的改进。.NET 没有此类可用选项。

了解 DevArt Code Compare 是如何做到的:他们让比较应用程序始终运行,因为启动它确实需要几秒钟的时间。

让应用程序始终在后台运行。从命令行启动时,只需将命令中继到已经运行的后台进程并转发结果。这使得命令行应用程序很小并且启动速度很快。它当然不需要加载 50 个程序集。

这可能是您能做的最好的事情,因为它几乎完全消除了启动。