我们有一个产品包含大约50个程序集(DLL文件),其中大部分需要并在主可执行文件启动时加载。结果是,即使在速度适中的机器上,组件的加载时间和JIT的加载时间也需要2-3秒,这在我们的情况下是不可接受的开销。
如果我们加载程序一次并从同一个仍在运行的可执行文件中多次运行,则时间从几毫秒开始。但对于最终用户来说,这不是一个选项,他们将从命令行运行它。
我想在首次实例化可执行文件时加快加载速度。在冷启动(重启Windows之后)和热启动之间有一个小的加速,但只是略有增加。我们可以使用哪些技术或工具来加速加载(注意:我们尝试过ILMERGE,它只能帮助大约30%,NGEN不是一个选项,它需要在各种系统和架构上运行)。
我正在考虑创建一个服务和/或一个特定的CLR托管环境,但希望有一个更简单,更简单的解决方案。我还没有尝试过GAC。
答案 0 :(得分:1)
使用NGEN和多核JIT。重构您的应用程序,以便在启动时需要更少的程序集和更少的代码。使用ILMerge减少程序集的数量,甚至可以删除一些未使用的代码。
所有这些都是您可以进行的优化。他们没有提供突破性的改进。 .NET没有这样的选择。
了解DevArt Code Compare如何做到这一点:他们让比较应用程序始终运行,因为启动它确实需要几秒钟。
让应用程序始终在后台运行。从命令行启动时,只需将命令转发到已在运行的后台进程并转发结果。这使命令行应用程序很小并且可以快速启动。它当然不需要加载50个组件。
这可能是你能做的最好的事情,因为它几乎完全消除了启动。
答案 1 :(得分:0)
您仍然可以通过将NGEN作为部署包(安装项目)的一部分来使用NGEN