为什么 "warmup" .NET 应用程序没有广泛使用的工具来防止 "cold start"?

Why isn't there a widely used tool to "warmup" .NET applications to prevent "cold start"?

明白为什么会出现冷启动(字节码需要通过JIT编译变成机器码)。然而,这些天所有生成的元数据都可用于二进制文件,我不明白为什么没有一个简单的工具可以自动获取字节代码并将代码中的所有路径(自动发现)转换为特定于该目标平台的机器代码。这意味着通过任何路径的第一个请求(假设休息api)将很快并且不需要任何进一步的即时编译。

我们可以创建一个自动化测试套件或负载测试,以便在允许机器进入负载平衡器轮换之前对所有路径进行 JIT(无论如何都是很好的最佳实践)。我们还可以翻转云托管提供商中的“始终开启”设置,以防止预热的应用程序从内存中被逐出(需要重新进行整个过程)。然而,这样一个古老的过程似乎在 2020 年仍然存在。

为什么没有执行此操作的工具?是什么限制阻止我们使用元数据、调试符号 and/or 其他方式来了解如何从一开始就为用户生成已经准备好的机器代码?

所以我一直在询问我的专业网络中一些敏锐的头脑,但似乎没有人能够准确指出是什么限制使这件事如此难以做到。但是,我确实得到了一些工具,它们在某种程度上可以满足我的需求。

Crossgen 似乎是最有前途的,但在我与之交谈过的许多同行中,它远没有被广泛使用。必须仔细看看。

还有几个执行某种启动任务,运行一些 class 初始化并将它们注册为单例。我不会认为这些有很大不同,只是 运行 应用程序的集成或负载测试。

大多数编程语言都有某种形式的本机图像编译器工具。如果您想这样做,则由您决定是否使用它们。

供应商应该为您的应用程序提供一个平台,您应该期望供应商提供一定程度的隔离和隐私。他们不应该深入研究您的应用程序以找出其所有“路径”。那将是非常具有侵略性的。

此外,“预热”所有路径对于供应商来说是一个资源过度密集的过程,有义务为他们托管的每个应用程序执行。