我在这里有一个疑问,我有一个 asp.net MVC Web 应用程序,每天晚上我们都在从 IIS 回收应用程序池。现在,当第二天第一个请求到来时,需要时间来获得响应。
第一次请求需要一些时间,因为未加载应用程序域(应用程序未启动)来启动 Web 应用程序需要一些时间。
现在的问题是及时编译器会再次出现吗?意思是每天早上都需要重新JIT重新编译?
我在这里有一个疑问,我有一个 asp.net MVC Web 应用程序,每天晚上我们都在从 IIS 回收应用程序池。现在,当第二天第一个请求到来时,需要时间来获得响应。
第一次请求需要一些时间,因为未加载应用程序域(应用程序未启动)来启动 Web 应用程序需要一些时间。
现在的问题是及时编译器会再次出现吗?意思是每天早上都需要重新JIT重新编译?
是的,应用程序将在回收后再次从 IL 编译为可执行代码:丢弃 appdomain 也会丢失 JITed 本机图像。
例如,您可以通过将不经常更改的依赖程序集放在 GAC 中来避免某些编译,并在它们上使用 NGEN。这可能会加快速度。
JITting 通常不会对性能造成巨大影响。IIS 进程的冷启动、启动 AppDomain 和从磁盘加载程序集可能会产生更大的影响。此外,您的应用程序可能在 global.asax 文件中有一些自定义启动逻辑(从 db 读取内容)。并且不要忘记您的数据库也可能需要唤醒。