我有一个ASP.NET(非MVC)网站,部署到IIS。 我已经设置了预编译选项(用于部署/发布)。 图像中的设置如下。 我已经尝试了下面和表面上的设置的变化,我没有看到这样做的任何重大改进。 为了testing,我正在部署一个预编译和一个非预编译到两个不同的IIS站点。 我进入并回收每个站点(或IIS重置)的应用程序池…在这样做后,我分别击中两个站点,他们都花了很长时间来呈现第一个页面加载(即caching应用程序池?),和那么对其他aspx页面的后续调用需要大约相同的时间(在预编译vs未预编译的情况下)。 我错过了什么吗? 预编译仅适用于大型网站吗? 挖掘一个中等规模的网站,有API调用,数据库调用等
是否有我需要的具体设置来提高应用程序池回收后首次访问网站的加载时间? 或者一般来说,提高一个尚未编译的aspx或ascx的首击响应时间?

“预编译”与“未预编译”之间的区别在于,“未预编译”的站点页面在通过.net编译器(csc.exe / vbc.exe)首次请求每个页面时会dynamic编译,你可以看到他们在任务pipe理器的进程选项卡中popup)。 所以每个页面都要花费一次编译时间,尽pipe通常是微不足道的。 如果您的网站在/ app_code目录中也有代码文件,那么在网站启动之前,这些代码文件也会被编译,所以初始启动应该比“预编译”版本慢一些。 也就是说,如果web.config中的“非预编译”网站的编译元素将“批处理”属性设置为false,否则它将花费时间在启动时编译所有页面,这可能需要很长时间,这取决于您的大小现场。 编译元素(ASP.NET设置架构)
在/ app_code文件之后,例如default.aspx在“未预编译”的网站上编译,两者的实际性能没有什么区别。
IIS重置或应用程序池回收也不会显示任何差异,因为部署一个并同时运行两个站点都编译。 IIS重置/应用程序池重置不会导致“未预编译”网站的重新编译,只更改文件/重新部署将。
看一看了解ASP.NETdynamic编译 ,理解它们做什么比较是很重要的。