我有一个 ASP.NET 2.0 应用程序(从 MSI 安装在 IIS 6.0 上),它被编译为“网站”,并在 Visual Studio 2005 中使用 Web 部署项目进行预编译/打包。(我已提出请求开发人员考虑更改为下一个版本的 Web 应用程序,但不会更改此版本)。
每当应用程序被回收(例如,对 web.config 进行更改)时,第一次命中时,ASP.NET JITs 应用程序。作为其中的一部分,它获取登录页面所需的所有程序集,并将它们编译为 Temporary ASP.NET Files 'assembly\dl3' 目录中的本机代码,这需要 20 到 60 秒。这只发生在回收站上,这种情况很少发生——但是当它发生时,它会导致页面加载时间更长,我相信有可能对此进行优化。
似乎有 122 个 DLL 需要考虑,其中一些是预编译的代码隐藏,其他是网站的第三方组件(例如 NHibernate.dll、报告组件等)
为什么它要重新编译/重新 JIT一切?为什么它没有检测到大多数程序集没有更改,并且没有尝试更改它们?我可以证明导致问题的不是批处理编译吗?(我<compilation debug="false"
在 web.config 中设置了 >。)
其他问题表明 NGEN 可能有用,但我读到无法在 ASP.NET 1.x 上使用它;我们使用的是 2.0,无论哪种方式我都找不到一个干净的答案。