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